亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于拷貝對象不調用初始化函數,如何給拷貝對象初始化?

class.h部分代碼:

Teacher(string name="Jim", int age = 15);

Teacher(const Teacher &T);


class.cpp部分代碼:

Teacher::Teacher(string name, int age) :m_strName(name),m_iAge(age){cout << "Teacher(string name, int age)" << endl;}

Teacher::Teacher(const Teacher &T) {cout << "Teacher(const Teacher &T)" << endl;}


main.cpp部分代碼:

Teacher t2;

cout << t2.getName() << " " << t2.getAge() << endl;

Teacher t3 = t2;

cout << t3.getName() << " " << t3.getAge() << endl;


運行結果如圖

http://img1.sycdn.imooc.com//5e56101000010d0702940116.jpg


我想到的解決方案是:

  1. 在main.cpp文件中加入設置代碼:setName(name);setAge(age);

    缺點:對于const常量類型會引起編譯器無法編譯,無法初始化。

  2. 拷貝函數中加入初始化列表?

Teacher::Teacher(const Teacher &T) :m_strName(T.m_strName),m_iAge(T.m_iAge){cout << "Teacher(const Teacher &T)" << endl;}

????實驗結果是成功的

????????http://img1.sycdn.imooc.com//5e5617150001fcf802740096.jpg

由此思考一個問題:如果讓系統自動生成拷貝構造函數,它是否是默認將被拷貝對象的值傳到拷貝對象中?如果成立,則可以證明系統自動生成的拷貝構造函數中是帶初始化列表的。

????我將拷貝構造函數頭文件都刪除并運行,得出結果如下

????????http://img1.sycdn.imooc.com//5e5617d90001ebd302910088.jpg

????由于沒有拷貝構造函數,所以輸出中少一句Teacher(const Teacher &T)。但是結果正確,所以這個論點是成立的。


問著問題問著解決了問題,有緣看到此的學友希望對你有幫助。再次感謝制作此系列教程的老師,簡直太強了!

正在回答

2 回答

前面不是早就講過了。。。

0 回復 有任何疑惑可以回復我~

可以自己寫一個函數進行復制,比如this

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
C++遠征之封裝篇(上)
  • 參與學習       103391    人
  • 解答問題       732    個

封裝--面向對象的基石,本教程力求幫助小伙伴們即學即會

進入課程

關于拷貝對象不調用初始化函數,如何給拷貝對象初始化?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號