C++ создает, присваивает и сравнивает новую переменную с двумя объектами внутри функции перегруженного оператора.

Назначение:
Реализуйте класс Alien, используя предоставленный файл Alien.h. Иностранец в этом сценарии описывается с точки зрения его / ее роста, веса и пола. Чтобы сравнить двух инопланетян, вы используете следующее уравнение для определения значения statusPoints для иностранца: statusPoints = weight * height * sexValue, где Genvalue равно 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 для сравнения?

Любая помощь приветствуется. Благодарю.

3 ответа

Решение

В функции

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)) для сравнения.

Другие вопросы по тегам