C++---拷贝构造函数和赋值构造函数
生活随笔
收集整理的這篇文章主要介紹了
C++---拷贝构造函数和赋值构造函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
摘要:最近看了一道面試題問:C++ 中拷貝賦值函數的形參能否進行值傳遞?我知道一般來說,拷貝構造函數的形參必須是自身類型的引用(《面向對象程序設計--C++語言描述(第二版)》這本書中有敘述),但是拷貝賦值函數的形參通常也是自身類型的引用,那么我們到底能不能將它們的形參改為值傳遞呢?
1,拷貝構造函數(不能進行值傳遞)
拷貝構造函數的原型有兩種:
1 // 拷貝構造函數原型 2 Person( Person& ); // method 1 3 Person( const Person& ); // method 2 4 5 // 下面這種原型是錯的 6 Person( Person ); // 不能進行值傳遞,只能傳遞引用不能進行值傳遞的原因:如果自身參數不是引用,則永遠不會調用成功------為了調用拷貝構造函數,我們必須拷貝它的實參,但為了拷貝實參,我們又必須調用拷貝構造函數,如此無限循環。
2,拷貝賦值函數(能進行值傳遞)
拷貝賦值函數的原型:
1 // 拷貝賦值函數原型 2 Person& operator=( const Person& );為了與內置類型的賦值保持一致,賦值運算符通常返回一個指向其左側運算對象的引用,這樣就可以實現連等的功能(a = b = c)
為了驗證我們的猜測(能進行值傳遞),我們做了一下驗證,代碼如下:
1 #include <iostream> 2 using namespace std; 3 4 class A { 5 public: 6 A():a(0){} 7 A(int k) {a = k;} 8 A& operator=(A other){ // 進行值傳遞而非引用傳遞 9 this->a = other.a; 10 } 11 int get(){return a;} 12 ~A(){} 13 private: 14 int a; 15 }; 16 17 int main(){ 18 A a1(1); // a1.get() == 1 19 A a2; // a2.get() == 0 20 a2 = a1; 21 cout << a2.get() <<endl; 22 return 0; 23 } 24 25 // 輸出結果 26 // 1 賦值構造函數實例(值傳遞)?
轉載于:https://www.cnblogs.com/zpcoding/p/10808547.html
總結
以上是生活随笔為你收集整理的C++---拷贝构造函数和赋值构造函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bash 实用技巧
- 下一篇: 【luogu2737】 [USACO4.