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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【C++】复制构造函数

發布時間:2025/5/22 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++】复制构造函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考資料:黃邦勇帥(里面對于臨時變量的說法我不是很理解,感覺里面的解釋有問題)

?

用到復制構造函數的情況:

1.函數值傳遞

2.返回對象

3.用一個對象初始化另一個對象

?

重點注意下面兩種情況:

① 只調用復制構造函數,不會生成臨時變量

  A a = b;

② 會產生臨時變量,會調用復制構造函數和賦值函數

  A a;

  a = A(b);

?

#include<iostream> using namespace std;class hyong { public:int a, b, c;hyong(){a = b = c = 0;cout << "construct" <<endl;}hyong(int i){a = b = c = i;cout << "construct 2" <<endl;}hyong(const hyong &obj) //復制構造函數 {a = b = c = 9;cout << "construct copy" <<endl;}void h(hyong k) //值傳遞 {cout << "k.a = " << k.a << " k.b = " << k.b<< endl;}hyong & hyong::operator = (const hyong & other){cout << "=" << endl;if(this == &other)return *this;a = other.a;b = other.b;c = other.c;return *this;}~hyong(){cout << "xigou" << endl;} };hyong f() //返回對象 {hyong m3(5);return m3; }int main() {hyong m(1);hyong n = m; //調用復制構造函數cout << m.a << m.b << endl;cout << n.a << n.b << endl;hyong m1 = hyong(m); //調用復制構造函數cout << m1.a << m1.b << endl;hyong m2(m); //調用復制構造函數cout << m2.a << m2.b << endl;hyong *p = new hyong(m); //調用復制構造函數cout << p->a << p->b << endl;cout << "------------"<< endl;hyong m3;m3 = hyong(m); //先用復制構造函數得到了一個臨時變量,然后用賦值函數將臨時變量值賦給m3, 之后臨時變量析構cout << "------------"<< endl;hyong m4;m4 = m; //直接調用賦值cout << "------------"<< endl;hyong m5 = f(); // 設f()返回的臨時變量為r,其實r就是函數里的m3,//m3通過復制構造函數賦給m5,之后m3析構cout << "------------"<< endl;hyong m6; //先定義,并用默認構造函數初始化了m6m6 = f(); //f()返回m3, 然后用復制構造函數將m3賦給了臨時變量tmp, m3析構;//tmp通過賦值函數賦給m6, tmp析構cout << "------------"<< endl;hyong m7(f()); // 設f()返回m3,m3通過復制構造函數賦給m7,之后m3析構return 0; }

轉載于:https://www.cnblogs.com/dplearning/p/4783626.html

總結

以上是生活随笔為你收集整理的【C++】复制构造函数的全部內容,希望文章能夠幫你解決所遇到的問題。

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