这是如何MyClass定义的:
class MyClass {
double x, y;
public:
MyClass (double a = 0., double b = 0.) {
x = a;
y = b;
cout << "Using the default constructor" << endl;
}
MyClass (const MyClass& p) {
x = p.x;
y = p.y;
cout << "Using the copy constructor" << endl;
}
MyClass operator =(const MyClass& p) {
x = p.x;
y = p.y;
cout << "Using the assignment operator" << endl;
return *this;
}
};
Run Code Online (Sandbox Code Playgroud)
我测试了在我的主程序中调用每个构造函数或方法时:
int main() {
cout << "MyClass p" << endl; MyClass p; cout << endl;
cout << "MyClass r(3.4)" << endl; MyClass r(3.4); cout << endl;
cout << "MyClass s(r)" << endl; MyClass s(r); cout << endl;
cout << "MyClass u = s" << endl; MyClass u = s; cout << endl;
cout << "s = p" << endl; s = p; cout << endl;
}
Run Code Online (Sandbox Code Playgroud)
为什么在第四个示例中使用了复制构造函数MyClass u = s,而不是赋值运算符?
编辑
包括输出,如下所示:
MyClass p
Using the default constructor
MyClass r(3.4)
Using the default constructor
MyClass s(r)
Using the copy constructor
MyClass u = s
Using the copy constructor
s = p
Using the assignment operator
Using the copy constructor
Run Code Online (Sandbox Code Playgroud)
因为你是在同一时间宣布你,所以不是实际的任务.因此,调用构造函数而不是赋值运算符.这样更有效,因为如果不是这个功能,那么首先要调用默认构造函数然后调用赋值运算符.这会引起不需要的副本的创建,因此会显着降低C++模型的性能.