C++类中如何将布尔值转换为字符串?代码输出异常解决
解决C++类中布尔值转字符串输出的问题
哈哈,这个问题我太熟了!C++里直接输出bool类型时,默认会打印1(代表true)或0(代表false),这就是你看到输出A dog is a 1, and is a 1的原因。要输出你想要的文本描述,有几种实用的解决方式,而且顺便说一句,你原代码里的构造函数声明和实现参数不匹配(声明多了一个string参数),得先修正这个编译错误哦!
方法一:输出时用三目运算符直接判断
这是最直接快速的方式,不需要修改类的结构,在输出语句里直接根据布尔值选择对应的字符串:
#include <iostream> #include <string> using namespace std; class Animal{ protected: bool isMammal; bool isCarnivorous; public: // 修正构造函数声明,和实现保持一致 Animal(bool, bool); 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() ? "carnivorous" : "not carnivorous") << ", and is a " << (Dog.getIsMammal() ? "mammal" : "non-mammal"); return 0; }
方法二:给类添加返回字符串状态的成员函数
如果需要多次调用这种文本输出,不如把逻辑封装到类里,代码更整洁:
#include <iostream> #include <string> using namespace std; class Animal{ protected: bool isMammal; bool isCarnivorous; public: Animal(bool, bool); bool getIsMammal() const {return isMammal;} bool getIsCarnivorous() const {return isCarnivorous;} // 添加返回字符串的成员函数,用const保证不会修改对象 string getCarnivorousStatus() const { return isCarnivorous ? "carnivorous" : "not carnivorous"; } string getMammalStatus() const { return isMammal ? "mammal" : "non-mammal"; } }; Animal::Animal(bool isMammal, bool isCarnivorous){ this->isMammal = isMammal; this->isCarnivorous = isCarnivorous; } int main(){ Animal Dog(true, true); cout << "A dog is " << Dog.getCarnivorousStatus() << ", and is a " << Dog.getMammalStatus(); return 0; }
方法三:重载<<运算符,让对象直接支持输出
如果想让Animal对象能直接用cout输出,重载流插入运算符是更优雅的做法:
#include <iostream> #include <string> using namespace std; class Animal{ protected: bool isMammal; bool isCarnivorous; public: // 用初始化列表替代赋值,更高效规范 Animal(bool mammal, bool carnivorous) : isMammal(mammal), isCarnivorous(carnivorous) {} bool getIsMammal() const {return isMammal;} bool getIsCarnivorous() const {return isCarnivorous;} // 声明友元函数以访问类的成员 friend ostream& operator<<(ostream& os, const Animal& animal); }; // 实现重载的<<运算符 ostream& operator<<(ostream& os, const Animal& animal){ os << "A dog is " << (animal.isCarnivorous ? "carnivorous" : "not carnivorous") << ", and is a " << (animal.isMammal ? "mammal" : "non-mammal"); return os; } int main(){ Animal Dog(true, true); // 直接输出对象即可 cout << Dog << endl; return 0; }
内容的提问来源于stack exchange,提问作者Hermon Jay
相关产品推荐
相关产品推荐

