日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++---拷贝构造函数和赋值构造函数

發布時間:2025/5/22 c/c++ 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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++---拷贝构造函数和赋值构造函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。