首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java的toString的C++等价物?

Java的toString的C++等价物?
EN

Stack Overflow用户
提问于 2009-10-11 05:28:40
回答 5查看 120.9K关注 0票数 168

对于自定义类的对象,我希望控制写入流的内容,即cout。这在C++中是可能的吗?在Java语言中,您可以出于类似的目的覆盖toString()方法。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-10-11 05:33:49

在C++中,您可以重载ostreamoperator<<和您的自定义类:

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 << ")";
}
票数 194
EN

Stack Overflow用户

发布于 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); }
票数 55
EN

Stack Overflow用户

发布于 2013-01-08 08:53:29

在C++11中,to_string最终被添加到标准中。

http://en.cppreference.com/w/cpp/string/basic_string/to_string

票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1549930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档