假设我创建了一个包含char数组的类。现在,操作员处理这个:
myClass inst;
cout << inst;
在“cout&lt;&lt; inst;”什么叫,只是通过班级的名字? 感谢。
答案 0 :(得分:12)
所谓的是std::ostream &operator<<(std::ostream &, myClass const &)
。如果需要,可以重载此内容。
答案 1 :(得分:4)
通过创建朋友输出操作符,如下例所示。
#include <iostream>
class MyClass {
friend std::ostream & operator<<(std::ostream &out, const MyClass &inst);
public:
// ... public interface ...
private:
char array[SOME_FIXED_SIZE];
};
std::ostream & operator<<(std::ostream &out, const MyClass &inst)
{
out.write(inst.array, SOME_FIXED_SIZE);
return out;
}
请不要对“char数组”的含义做出一些假设,如果你的char数组实际上是nul(0个字符)终止,它会大大简化。
更新:我会说这不是严格意义上的类的返回值,而是类的文本表示 - 您可以自由定义。
答案 2 :(得分:2)
编译器将查找operator<<
的重载。特别是,它将查找std::ostream
(不存在)的成员函数重载或自由函数,您应该使用以下原型重载:
std::ostream &operator<< (std::ostream &os, const myClass &x);
如果您需要访问受保护/私人会员,您可能需要将其设为myClass
的朋友。
答案 3 :(得分:2)
这导致编译器错误,除非你有一个ostream知道的某种类型的重载类型转换操作符。您可以通过重载全局ostream& operator(ostream& os, const myClass& x)
或使您的类型可转换为字符串/ int等来将您自己的类型添加到ostream知道的类型中。但是请注意,类型转换重载可以将您射入脚中并被视为糟糕的做法。
最简单的方法是从类中打印一些变量:
myClass inst;
cout << inst.getName() << ": " << inst.getSomeValue();
答案 4 :(得分:1)
为了能够使用std::cout << someClass
,您必须创建如下的运算符:
std::ostream &operator<< (std::ostream &, const someClass &);