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

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

關于Watch w(t);

Watch w(t);

拷貝構造函數并不需要函數名和類名同名

之前課上只說了拷貝構造函數的格式是: 類名(const 類名 &變量名)

這里換成對象就是? ?類名(const 類名 &對象名),&對象名只是一個引用,引用的這個對象t是有參數值的

類中實例化的對象沒有傳值,但是這個對象需要傳值,由于參數列表相同,所以給類中實例化的對象m_tTime傳了t


各位大佬,我這樣理解有問題嗎?

正在回答

3 回答

正解如下:

Watch類中定義了對象成員,即?

Time?m_tTime;

以及一個拷貝構造函數

Watch(const?Time?&t)

的確是類名與拷貝構造函數要同名,一樓說的沒毛病,是我當時理解錯了

該拷貝構造函數傳入的是Time類型的引用t,而t剛剛好是主函數中初始化的

Time?t(6,?30,?20);

在這里使用了如下的初始化列表,意思就是將t的內容傳給m_tTime

Watch(const?Time?&t):m_tTime(t)

這是一個深拷貝,即將t對象的數據內容傳給了m_tTime,?從而使得當拷貝構造函數執行完畢后,m_tTime有相應的數據成員內容,即

m_tTime.m_iHour;?????????//=6
m_tTime.m_iMinute;?????//=30
m_tTime.m_iSecond;????//=20


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

這個練習中像下面這樣寫也可以編譯通過,也就是說寫成拷貝構造函數的確能運行,但這么看不就違背了拷貝構造函數必須類名和函數名同名的規定了么?

Watch(const Time &t):m_tTime(t)? ?{? }


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

教不懂學不會的菜鳥程序猿小白小黃小強

":m_tTime(t)"這部分是初始化列表,并不是函數名,你去了解一下初始化列表吧。
2019-03-08 回復 有任何疑惑可以回復我~
#2

Cyber丶Kaka 提問者 回復 教不懂學不會的菜鳥程序猿小白小黃小強

Watch(const Time &t)這個不就是拷貝函數嗎?
2019-03-08 回復 有任何疑惑可以回復我~
#3

慕雪3303231

回復 Cyber拷貝構造函數的返回值哪去了?
2019-03-17 回復 有任何疑惑可以回復我~
#4

Cyber丶Kaka 提問者 回復 慕雪3303231

你好,拷貝構造函數其返回的是一個對象,不是返回值,這里默認返回的就是t 淺拷貝是簡單地返回指針地址,深拷貝則是復制對象內容 這段代碼是沒有任何問題的,因為是參考答案,但我只是不理解為什么這里要這么寫 而且我問的是:我這樣理解有錯誤嗎?請回答有還是沒有,如果沒有,請說明理由,謝謝!
2019-03-20 回復 有任何疑惑可以回復我~
#5

Cyber丶Kaka 提問者 回復 Cyber丶Kaka 提問者

不好意思,返回的是m_tTime
2019-03-20 回復 有任何疑惑可以回復我~
查看2條回復

同為小白過來說說我的理解:

1、拷貝函數應該是要跟類名同名的,跟構造函數類似,區別在于拷貝函數會有一個const變量的參數。

2、顧名思義,拷貝函數的作用是拷貝,拷貝的對象就是傳入的const變量的參數,這個參數就是對象的引用。

3、通過賦值的方式實例化對象,這個值就是傳入給拷貝函數的參數,拷貝函數因此有了拷貝的對象。

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

舉報

0/150
提交
取消
C++遠征之模板篇
  • 參與學習       91140    人
  • 解答問題       325    個

本C++教程力求即學即會,所有知識以實踐方式講解到操作層面

進入課程

關于Watch w(t);

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

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

幫助反饋 APP下載

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

公眾號

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