【C++】复制构造函数
生活随笔
收集整理的這篇文章主要介紹了
【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++】复制构造函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转盘轴承和转台轴承有哪些区别
- 下一篇: 碎石坑口价与&nbsp;&