我想控制写入流的内容,即cout自定义类的对象.这可能在C++中?在Java中,您可以toString()为了类似的目的覆盖该方法.
我想询问有效C++中的具体要点.
它说:
如果一个类需要像多态类一样运行,那么析构函数应该是虚拟的.它进一步补充说,由于
std::string没有虚拟析构函数,因此永远不应该从中派生出来.还std::string甚至没有设计成一个基类,忘记多态基类.
我不明白一个类中具体要求什么才有资格成为基类(不是多态的)?
我不应该从std::string类派生的唯一原因是它没有虚拟析构函数吗?为了可重用性,可以定义基类,并且多个派生类可以从中继承.那么什么使得std::string甚至没有资格成为基类?
此外,如果存在纯粹为可重用性目的而定义的基类,并且有许多派生类型,是否有任何方法可以阻止客户端执行,Base* p = new Derived()因为这些类并不是要多态地使用?
在Java中,当一个类重写.toString()并且你这样做System.out.println()时会使用它.
class MyObj {
public String toString() { return "Hi"; }
}
...
x = new MyObj();
System.out.println(x); // prints Hi
Run Code Online (Sandbox Code Playgroud)
如何在C++中实现这一点,以便:
Object x = new Object();
std::cout << *x << endl;
Run Code Online (Sandbox Code Playgroud)
会输出一些我选择的有意义的字符串表示Object吗?