参加完美世界的笔试题目,有个题目是拷贝构造函数调用,同时定义了“=”重载,这个时候 =重载函数是否会被调用?
做了个实验,调用拷贝构造函数进行初始化的时候,是不会调用=重载的。
#include<iostream>
#include<vector>
#include<string>
using namespace std;
class A {
private:
int a;
public:
int getA()
{
return a;
}
A() {
a = 1;
cout << "构造函数..." << endl;
}
A(const A &b)
{
this->a = b.a;
cout << "拷贝构造函数..." << endl;
}
void operator=(const A& b)
{
this->a = b.a + 1;
cout << "=重载.." << endl;
}
};
int main()
{
A a;
cout << a.getA() << endl;
A b = a;
cout << b.getA() << endl;
A c;
c = a;
cout << c.getA() << endl;
system("pause");
return 0;
}输出结果为:
构造函数...
1
拷贝构造函数...
1
构造函数...
=重载..
2
请按任意键继续. . .
可见,在调用拷贝构造函数进行初始化的时候,并没有调用=重载,只有c = a这句调用了=重载。
本文通过一个C++实验探讨了拷贝构造函数与赋值操作符重载的调用时机。实验结果显示,当使用拷贝构造函数初始化对象时,并不会触发赋值操作符重载的执行,而直接赋值则会调用该重载。

被折叠的 条评论
为什么被折叠?



