[問題] 繼承中class的成員初始問題?

看板C_and_CPP作者 (Hypnus)時間13年前 (2011/05/18 16:11), 編輯推噓0(006)
留言6則, 3人參與, 最新討論串1/1
class B { int value; public: B(){value = 0;} B(int v) { value = v; } }; class A:public B { string str; public: A(){str = "";} A(string s, int v):B(v) { str = s; } A *a; }; 1. 我想在class A中加一個型態為A的成員a(紅字部分),並對它做初始, 但是不能寫成A *a = new A("test", 4);,以及我不清楚A *a;放置的位置 是否正確(雖然現在的位置似乎不會編譯錯誤),請問這樣的情形該如何撰寫? 2. 是不是若要在A中寫出預設建構子A(),就必須在基礎類別B中也把預設建構 子B()寫出來? 感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.33.201.221

05/18 16:13, , 1F
1. 關鍵字: initializer list
05/18 16:13, 1F

05/18 16:19, , 2F
第二個問題是未必的 http://pastie.org/1920566
05/18 16:19, 2F

05/18 16:20, , 3F
至於A *a;要怎麼擺才算「正確」 倒是沒什麼標準答案
05/18 16:20, 3F

05/18 16:56, , 4F
你這是賦值, 不是初始化
05/18 16:56, 4F
再請教: 我剛才看了一下initialization list,就是將建構子寫成像 A(string s = ""):str(s) { } 對吧 那如果我要在class A中有型態為A的成員a和b並賦值給它們固定的值,所以在class A中 宣告 A* a; A* b; 但是因為無法直接new成 A* a = new A("test", 4); A* b = new A("test2", 5); 所以只好把new的動作放到建構子裡做,但是這裡class A有兩種建構子,因此只能 在兩種建構子裡都丟一樣的new的動作了嗎?是不是還有其他比較建議的方式呢? ※ 編輯: Hypnus 來自: 114.33.201.221 (05/18 20:08)

05/18 20:11, , 5F
你說的是這樣? http://pastie.org/1921352
05/18 20:11, 5F

05/18 20:14, , 6F
05/18 20:14, 6F
yep,我之前想錯了,james732大說的是對的,謝謝各位了 ※ 編輯: Hypnus 來自: 114.33.201.221 (05/20 02:34)
文章代碼(AID): #1Dqtyjpi (C_and_CPP)