运算符重载,什么时候用友元?

来源:互联网 发布:爬虫数据 编辑:程序博客网 时间:2024/06/04 18:16

重载ostream和istream运算符的时候,必须重载为友元,这是为什么?

 

什么时候应该用友元函数?什么时候用成员函数?

 

有些操作必须是成员函数:比如构造函数,拷贝构造函数,析构函数以及虚函数

由于成员是局部于类的,所以,这些函数还是优先被作为成员。

 

 

 

由此可见,修改一个类对象状态的操作,应该或者是一个成员,或者是一个带有非

const引用参数的全局函数。那些要求基础类型的左值运算符作为用户定义类型的成员函

数最为自然。

 

 

如果希望某个运算的所有运算对象都能允许隐式类型转换,实现他的函数就应该作为

非成员函数,取const引用参数或非引用参数。在应用不需要基础类型的左值的运算符(+,

-||等),显示它们的函数通常采用这种方式。这些运算符经常需要访问其运算对象类的内部

表示,因此,它们friend函数的最常见的来源。

      如果没有定义类型转换,选择成员函数要比采用引用参数的友元函数更好

 

PS:如果重载为成员函数,编译时就会产生以下错误:

 error C2679: 二进制“<<”: 没有找到接受“MyString”类型的右操作数的运算符(或没有可接受的转换)

原创粉丝点击