operator和 构造函数 的问题,,搞混了

Damn_boy 2010-11-02 10:40:44

Class Test
{
Test ( cosnt Test &);

Test &operator=(const Test &);
}


下面这样调用的话

void main()
{
Test one;
Test two = one;
}


调用的是上面哪个?
是构造函数还是自定义的运算符?

书上说
对类对象进行赋值操作(用 = )
会调用单一参数的构造函数。
...全文
104 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
libinfei8848 2010-11-03
  • 打赏
  • 举报
回复
拷贝构造,编译器优化
sallan 2010-11-03
  • 打赏
  • 举报
回复
调用的是拷贝构造函数
imvman 2010-11-03
  • 打赏
  • 举报
回复
创建对象的时候,调用的就是构造函数。
用一个已经存在的对象去创建另外一个对象,调用的是拷贝构造函数,或者默认的拷贝构造函数。
赋值的时候,表明两个对象都已经存在,用的是赋值操作符重载函数。


Test one;
Test three;
Test two = one;//创建了对象 two
three = two;//调用的是赋值重载函数。

phpjspasp 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qq120848369 的回复:]

因为定义的同时使用=就是一个构造的过程.

如果已经定义了,然后再=就是一个赋值过程.
[/Quote]
这个好。
qq120848369 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 gules 的回复:]
分清“初始化”与“赋值”!

Test two = one; // 这是初始化,不是赋值!

Test two; // 这
two = one; // 才是赋值,会调用重载的=操作符。
[/Quote]

咱还差几个三角才能变成星星。
gules 2010-11-02
  • 打赏
  • 举报
回复
分清“初始化”与“赋值”!

Test two = one; // 这是初始化,不是赋值!

Test two; // 这
two = one; // 才是赋值,会调用重载的=操作符。
qq120848369 2010-11-02
  • 打赏
  • 举报
回复
因为定义的同时使用=就是一个构造的过程.

如果已经定义了,然后再=就是一个赋值过程.
Damn_boy 2010-11-02
  • 打赏
  • 举报
回复
试过了 是调用拷贝构造函数,,可是为嘛这样?
qq120848369 2010-11-02
  • 打赏
  • 举报
回复
调用拷贝构造函数.
Csuxiaowu 2010-11-02
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
class A
{
public:
A(){}
A(const A&single)
{
cout<<"hello"<<endl;
}
A & operator = (const A &single)
{
cout<<"world"<<endl;
}
};
int main()
{
A one;
A two = one;
//two = one;
return 0;
}

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧