Как изменить логическое значение в строку в классе? - PullRequest
0 голосов
/ 25 мая 2018
#include <iostream>
#include <string>
using namespace std;

class Animal{
    protected:
        bool isMammal;
        bool isCarnivorous;    
    public:
        Animal(bool, bool, string);
        bool getIsMammal(){return isMammal;}
        bool getIsCarnivorous(){return isCarnivorous;}
};

Animal::Animal(bool isMammal, bool isCarnivorous){
    this -> isMammal = isMammal;
    this -> isCarnivorous = isCarnivorous;
}

int main(){    
    Animal Dog(true, true);
    cout << "A dog is " << Dog.getIsCarnivorous() << ", and is a " << Dog.getIsMammal();
    return 0;
}

Предположим, у меня есть этот код.Я ожидаю вывод строки вроде A dog is carnivorous, and is a mammal.Но вместо этого я получил это A dog is a 1, and is a 1.

Как я могу решить это?

Ответы [ 3 ]

0 голосов
/ 25 мая 2018
string getIsCarnivorous() { return string(isMammal ? "carnivorous" : "not carnivorous"); }
string getIsMammal() { return string(isMammal ? "a mammal" : "not a mammal"); }
0 голосов
/ 25 мая 2018

Вы можете использовать троичный оперстор

string getIsMammal( ){
        return (isMammal?"is mammal":"");
   }

И то же самое для другой функции.

В любом случае не кажется лучшим программирование для возврата строки, поскольку вы должны отделитьДанные с его точки зрения.Я бы сохранил логическое возвращение и сделал бы логику вида из класса.

cout << "a dog " << dog.getIsMammal()?"is mammal":"" << endl;
0 голосов
/ 25 мая 2018

Вы можете использовать условный оператор:

cout << "A dog is " << (Dog.GetIsCarnivorous() ? "" : "not ") << "carnivorous, and is " << (Dog.getIsMammal() ? "" : "not ") << "a mammal.";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...