0

重载运算符时的最佳实践是什么<<。特别是,我如何区分对指针和对象的操作。喂食时它们都输出相同的字符串是否符合犹太教规<<

例如,考虑以下代码,其中两个Book对象都已初始化

Book b1;
Book* b2;

// initialization stuff

// can both of these output the same representation of a book object?
cout << b1 << endl;
cout << b2 << endl;
4

2 回答 2

2

不要重载operator<<指向-的指针TT相反,为自身重载(或者更确切地说,const T&酌情),并在调用operator<<.

cout << *b2 << endl;

重载指针到-T只会造成混淆和潜在的名称冲突,如果你重载 forconst T&

于 2013-05-21T16:08:02.900 回答
2

如何区分对指针和对象的操作。

通过operator<<函数的签名:

std::ostream& operator<<(std::ostream&, const Book&); // operates on object
std::ostream& operator<<(std::ostream&, const Book*); // operates on pointer

他们都输出相同的字符串是否符合规定?

这是允许的,但不是特别有用。很少见实施第二种形式。如果您想实现第二种形式,请意识到它完全是多余的。例如,如果您有一个Book* pBook

std::cout << *pBook << "\n";

这将打印pBook相当好的指向的对象。

于 2013-05-21T16:08:40.403 回答