首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

operator=只好是成员函数

2012-12-14 
operator只能是成员函数?而不能是friend函数?以前好像记得是这样,忘了,确认一下,倒是记得effective C++上

operator=只能是成员函数?
而不能是friend函数?
以前好像记得是这样,忘了,确认一下,
倒是记得effective C++上说的,operator= 一定要返回this*;
因为没有更好的选择。
[解决办法]
终于又见到2分贴了。。。

[解决办法]

[解决办法]
没人知道?
随便回答个啊,好让我结贴
[解决办法]
先看下面这段代码:


#include <iostream>
using namespace std;

class Base {
public:

private:
  int data;
};

int main()
{
  Base b;
  Base s;
  b = s;
  return 0;
}

可以看出编译器会为类Base默认生成一个operator=赋值函数
(编译会默认生成的函数还有:operator&(),~Base(),Base( const Base&),...),关于不带参数或者参数都有默认值的Base()函数编译器到底会不会自动生成它,暂且不去讨论,那是另外一个话题了。

既让默认中已经有一个赋值函数了,此时再重载友元的operator=函数肯定会造成调用二义性的。
---------------------------分割线------------------------------------------

[解决办法]
引用:
可以看出编译器会为类Base默认生成一个operator=赋值函数
(编译会默认生成的函数还有:operator&(),~Base(),Base( const Base&),...),关于不带参数或者参数都有默认值的Base()函数编译器到底会不会自动生成它,暂且不去讨论,那是另外一个话题了。

既让默认中已经有一个赋值函数了,此时再重载友元的operator=函数肯定会造成调用二义性的。
---------------------------分割线------------------------------------------

为啥不能编辑呢。
说错了,编译器有可能生成不带参数的默认构造。参数都带有默认值的“默认构造”是由程序员自行设计的。
这里可能要分清『编译器默认构造』和『程序员默认构造』了。

热点排行