标签:out sig 不同 class 实例 rgb 区别 赋值运算符 拷贝赋值运算符
转自:https://www.cnblogs.com/wangguchangqing/p/6141743.html
拷贝构造函数和赋值运算符的行为比较相似,都是将一个对象的值复制给另一个对象;
但是其结果却有些不同,拷贝构造函数使用传入对象的值生成一个新的对象的实例,而赋值运算符是将对象的值复制给一个已经存在的实例。
拷贝构造函数也是一种构造函数,那么它的功能就是创建一个新的对象实例;赋值运算符是执行某种运算,将一个对象的值复制给另一个对象(已经存在的)。
调用的是拷贝构造函数还是赋值运算符,主要是看是否有新的对象实例产生。如果产生了新的对象实例,那调用的就是拷贝构造函数;如果没有,那就是对已有的对象赋值,调用的是赋值运算符。
class Person { public: Person(){cout<<"无参构造函数"<<endl;} Person(const Person& p) { cout << "Copy Constructor" << endl; } Person& operator=(const Person& p) { cout << "Assign" << endl; return *this; } private: int age; string name; }; void f(Person p) { return; } Person f1() { Person p;//无参构造函数 return p; } int main(){ Person p; //无参构造函数 Person p1 = p; // Copy Constructor Person p2; //无参构造函数 p2 = p; // Assign f(p2); // Copy Constructor cout<<"-----"<<endl; p2 = f1(); // Assign cout<<"-----"<<endl; Person p3 = f1(); //
return 0; } #输出: 无参构造函数 Copy Constructor 无参构造函数 Assign Copy Constructor ----- 无参构造函数 Assign ----- 无参构造函数
唯一不明白的地方是最后一句,调用了f1内部创建了对象,打印“无参构造函数”,那么又赋值给p3,为什么没调用拷贝构造函数呢?不明白。
标签:out sig 不同 class 实例 rgb 区别 赋值运算符 拷贝赋值运算符
原文地址:https://www.cnblogs.com/BlueBlueSea/p/13886598.html