Назначение:
Реализуйте класс Alien, используя предоставленный файл Alien.h. Иностранец в этом сценарии описывается с точки зрения его / ее роста, веса и пола. Чтобы сравнить двух пришельцев, используйте следующее уравнение для определения значения statusPoints пришельца:
statusPoints = вес * рост * полВысота
где гендерное значение равно 2, если иностранец — мужчина, и 3, если иностранец — женщина. Точки состояния должны рассчитываться при необходимости, а не храниться в качестве элемента данных. Это позволяет избежать так называемых устаревших данных, в которых один элемент данных, например вес, может измениться, а переменная точек состояния не будет обновлена.
Статус следует использовать при сравнении инопланетян.
Вам нужно перегрузить ==,! =,>, <> = и <= операторы для сравнения инопланетян. Таким образом, вы можете иметь такие утверждения, как следующее:
if (alien1> alien2) {// сделать что-то}
Очевидно, Alien1 будет объектом Alien, и Alien2. Предполагается также, что они имеют инициализированные элементы данных (рост, вес и пол).
Вот предоставленный файл .h. Опять же, я не могу изменить этот файл, поскольку он предоставлен для меня.
#ifndef ALIEN_H
#define ALIEN_H
class Alien
{
public:
Alien();
Alien(int h, int w, char g);
void setHeight(int h);
void setWeight(int w);
void setGender(char g);
int getHeight();
int getWeight();
char getGender();
//operators: compare the aliens
bool operator==(const Alien& alien) const;
bool operator!=(const Alien& alien) const;
bool operator<=(const Alien& alien) const;
bool operator<(const Alien& alien) const;
bool operator>=(const Alien& alien) const;
bool operator>(const Alien& alien) const;
private:
int height; //inches
int weight; //pounds
char gender; //M or F
};
#endif
вот мой файл Alien.cpp
#include "Alien.h"#include <iostream>
using namespace std;
Alien::Alien()
{
height = 60;
weight = 100;
gender = 'M';
int statusPoints = 0;
}
Alien::Alien(int h, int w, char g)
{
height = h;
weight = w;
gender = g;
int statusPoints = 0;
}
void Alien::setHeight(int h)
{
height = h;
}
void Alien::setWeight(int w)
{
weight = w;
}
void Alien::setGender(char g)
{
gender = g;
}
int Alien::getHeight()
{
return height;
}
int Alien::getWeight()
{
return weight;
}
char Alien::getGender()
{
return gender;
}
bool Alien::operator==(const Alien& alien) const
{
return (height == alien.height && weight == alien.weight && gender == alien.gender);
}
bool Alien::operator!=(const Alien& alien) const
{
return (height != alien.height || weight != alien.weight || gender != alien.gender);
}
bool Alien::operator<=(const Alien& alien) const
{
Alien temp1;
Alien temp2;
int genderValue = 2;
if(gender == 'F')
{
genderValue = 3;
}
int statusPoints = 0;if (statusPoints <= statusPoints)
{ return true; }
else { return false; }
}
Если я не могу изменить файл .h или сделать statusPoints функцией-членом, где я могу создать переменную statusPoints в main или внутри перегруженного оператора? Также … Как мне назначить statusPoints var для сравнения?
Любая помощь приветствуется.
Благодарю.
В функции
Alien::Alien(int h, int w, char g)
{
height = h;
weight = w;
gender = g;
int statusPoints = 0;
}
statusPoints
является локальной переменной функции, которая не будет полезна для чего-либо позже.
Мое предложение: создать вспомогательную функцию в файле .cpp:
static int getStatusPoint(Alien const& alien)
{
return alien.getHeight()*alien.getWeight()*aliean.getGender();
}
и использовать его в других функциях.
bool Alien::operator== (const Alien& rhs) const {
return getStatusPoint(*this) == getStatusPoint(rhs);
}
bool Alien::operator!= (const Alien& rhs) const {
return getStatusPoint(*this) != getStatusPoint(rhs);
}
и т.п.
Ваше назначение говорит, что вы не должны создавать переменную statusPoints. Вы должны вычислить это значение, когда это необходимо.
Так в вашем operator==
функция, вы бы сделали что-то вроде:
bool Alien::operator== (const Alien& rhs) const {
return (height * weight * gender == rhs.height * rhs.weight * rhs.gender);
}
А затем нечто подобное для других функций компаратора.
В main или где бы вы ни создавали экземпляр объекта Alien, вы можете объявить int alienStatPts = alien.getHeight() * alien.getWeight() * 3
например, для женщины, а затем выполните те же вычисления для другого объекта «Чужой», а затем сравните два целых значения. Вы можете сделать это в функции, не являющейся членом getStatPts(Alien alien)
а затем сделать if(getStatPts(alien1) < getStatPts(alien2))
для сравнения.