重载运算符时的最佳实践是什么<<
。特别是,我如何区分对指针和对象的操作。喂食时它们都输出相同的字符串是否符合犹太教规<<
?
例如,考虑以下代码,其中两个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;
不要重载operator<<
指向-的指针T
。T
相反,为自身重载(或者更确切地说,const T&
酌情),并在调用operator<<
.
cout << *b2 << endl;
重载指针到-T
只会造成混淆和潜在的名称冲突,如果你重载 forconst T&
如何区分对指针和对象的操作。
通过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
相当好的指向的对象。