看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《CrBoy (上大學好忙喔)》之銘言: : 補充說明: : 我沒辦法把B當作自己的一個member(而非繼承) : : 因為B有很多method我希望可以直接拿來用 而不用重包一次 : : 這樣的狀況該如何解呢?麻煩各位幫忙解個惑 謝謝! 怎麼不這樣用? class B { public: A& getA() { return a; } private: A a; }; 你要呼叫 A 底下的 method 就直接 getA() 然後再接 A 的 method 就好啦? 我相信你的 case 並不需要繼承的 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.154.15
flamo:std::swap(A(x), *this); // 這樣? 05/14 22:46
這樣寫編不過
CrBoy:這樣真的行得通嗎?如果可以的話,那能不能用 *this=A(x); ? 05/15 00:44
不能
flamo:這樣更好! swap裡做了些沒必要做的事 05/15 00:52
不能的原因同樣是編不過 別用繼承啦 「朕不給的,你不能拿!」 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.82.39
flamo:我用gcc4.3, gcc3.4, vc2008都可以compile,要不要check一下? 05/15 09:07
coldstars:第一個不能編 第二個可以 個人是覺得第二個似乎可行...? 05/15 10:35
coldstars:第一個不能編是因為rval不能塞到non-const lval的位子 05/15 10:35
coldstars:只要一點點舊的編譯器應該都不夠嚴格 gcc-4.4就會抓了 05/15 10:36
flamo:第一個gcc不行,vc可以. 應該要 A a(x); swap(a, *this); 05/15 10:47
flamo:vc2008 Warning Level開最高(w4)也沒 warning, 冏 05/15 10:48
littleshan:嗯,是我看錯,第二個可以 05/15 12:27
coldstars:阿 第二個要這樣 *(static_cast<A*>(this))=A(x) 05/15 13:01
coldstars:雖然試了一下不會蓋掉vptr 但說真的沒什麼把握XD 05/15 13:01
flamo:轉型有必要? 跟vptr有關係? 只是Copy Assignment吧? 05/15 13:43
coldstars:忘記orz 我是說如果用繼承的話... 05/15 18:15
CrBoy:coldstars: 我這邊是設定A是derived class 所以this的type 05/15 18:38
CrBoy:本來就是A*了 你指的是不是*(static_cast<B*>(this))=B(x);? 05/15 18:39
coldstars:是的! 05/16 00:11
flamo:等同這樣? B* pb = this; *pb = B(x); 05/16 02:44
ilovebbs:不過B那個不是原po自己沒辦法動的嗎? 05/17 11:23