复制构造函数和赋值运算符类似,因为它们都用于使用另一个对象初始化一个对象。但是,它们之间有一些基本的区别:
null
复制构造函数 | 赋值运算符 |
---|---|
当从现有对象创建新对象时,将调用它作为现有对象的副本 | 当一个已经初始化的对象从另一个现有对象中分配了一个新值时,就会调用此运算符。 |
它会为新对象创建一个单独的内存块。 | 它不会创建单独的内存块或新的内存空间。 |
它是一个重载构造函数。 | 它是位运算符。 |
C++编译器隐式提供复制构造函数,如果在类中没有定义复制构造函数。 | 如果赋值运算符没有重载,则会创建按位复制。 |
语法: 类名(续类名和obj){ //身体 } |
语法: 类名obj1,obj2; obj2=obj1; |
考虑下面的C++程序。
CPP
// CPP Program to demonstrate the use of copy constructor // and assignment operator #include <iostream> #include <stdio.h> using namespace std; class Test { public : Test() {} Test( const Test& t) { cout << "Copy constructor called " << endl; } Test& operator=( const Test& t) { cout << "Assignment operator called " << endl; return * this ; } }; // Driver code int main() { Test t1, t2; t2 = t1; Test t3 = t1; getchar (); return 0; } |
输出
Assignment operator called Copy constructor called
说明: 在这里 t2=t1; 呼叫 赋值运算符 ,与 t2。运算符=(t1); 和 测试t3=t1; 呼叫 复制构造函数 ,与 试验t3(t1);
必须阅读: C++中的复制构造函数是什么时候调用的?
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END