对于自定义类的对象,我希望控制写入流的内容,即cout
。这在C++中是可能的吗?在Java语言中,您可以出于类似的目的覆盖toString()
方法。
发布于 2009-10-11 05:33:49
在C++中,您可以重载ostream
的operator<<
和您的自定义类:
class A {
public:
int i;
};
std::ostream& operator<<(std::ostream &strm, const A &a) {
return strm << "A(" << a.i << ")";
}
这样你就可以在streams上输出你的类的实例:
A x = ...;
std::cout << x << std::endl;
如果您的operator<<
想要打印出类A
的内部结构,并且确实需要访问它的私有和受保护的成员,您也可以将它声明为一个朋友函数:
class A {
private:
friend std::ostream& operator<<(std::ostream&, const A&);
int j;
};
std::ostream& operator<<(std::ostream &strm, const A &a) {
return strm << "A(" << a.j << ")";
}
发布于 2009-10-11 08:27:38
你也可以这样做,允许多态:
class Base {
public:
virtual std::ostream& dump(std::ostream& o) const {
return o << "Base: " << b << "; ";
}
private:
int b;
};
class Derived : public Base {
public:
virtual std::ostream& dump(std::ostream& o) const {
return o << "Derived: " << d << "; ";
}
private:
int d;
}
std::ostream& operator<<(std::ostream& o, const Base& b) { return b.dump(o); }
发布于 2013-01-08 08:53:29
在C++11中,to_string最终被添加到标准中。
http://en.cppreference.com/w/cpp/string/basic_string/to_string
https://stackoverflow.com/questions/1549930
复制相似问题