C++运算符重载:为什么流运算符不能重载为成员函数?

2024-12-24 22:52:10
推荐回答(3个)
回答1:

试想一下这一点:
将我们的类派生于ostream,也就是做为流类的子类,这样,不就可以将插入运算符声明为成员函数,并且用法也与友元方式下一样了吗?
那么为什么还要声明为友元呢?原因上面回答者也说了一些。。。
不能重载的根本原因在于,
大部份的标准库实现中,对ostream,istream类体系采用了构造函数保护继承的方式。。。致使即使以继承的方式来扩展流类,也会在对象实例化时遭遇阻碍。。。
另一方面,标准库中的流类,其插入符函数没有声明为虚函数,因此子类不能对其实现进行覆盖,所以也使成员函数重载遭遇到实质的困难。。。
总的来说,C++标准I/O库非常繁杂且难,其实现思想很多都与常规的OOP有所出入。。。在使用的时候要谨慎,并最好遵从惯例。。。

回答2:

class object如果实现了成员operator<< ,调用其对象格式o<
虽然不能“重载”为成员函数,但是可以定义为新的成员函数,只不过使用习惯和常例不符而已。

回答3:

class T;
T t;
成员的话,得这么用了
t<而不是
cout<而且也无法链式使用了
cout<