Re: [問題] C++ 我該怎麼達到重新construct一個物ꔠ…

看板C_and_CPP (C/C++)作者 (我要加入劍道社!)時間16年前 (2010/05/15 03:57), 編輯推噓6(6010)
留言16則, 5人參與, 最新討論串1/2 (看更多)
※ 引述《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

05/14 22:46,
std::swap(A(x), *this); // 這樣?
05/14 22:46
這樣寫編不過

05/15 00:44,
這樣真的行得通嗎?如果可以的話,那能不能用 *this=A(x); ?
05/15 00:44
不能

05/15 00:52,
這樣更好! swap裡做了些沒必要做的事
05/15 00:52
不能的原因同樣是編不過 別用繼承啦 「朕不給的,你不能拿!」 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.82.39

05/15 09:07, , 1F
我用gcc4.3, gcc3.4, vc2008都可以compile,要不要check一下?
05/15 09:07, 1F

05/15 10:35, , 2F
第一個不能編 第二個可以 個人是覺得第二個似乎可行...?
05/15 10:35, 2F

05/15 10:35, , 3F
第一個不能編是因為rval不能塞到non-const lval的位子
05/15 10:35, 3F

05/15 10:36, , 4F
只要一點點舊的編譯器應該都不夠嚴格 gcc-4.4就會抓了
05/15 10:36, 4F

05/15 10:47, , 5F
第一個gcc不行,vc可以. 應該要 A a(x); swap(a, *this);
05/15 10:47, 5F

05/15 10:48, , 6F
vc2008 Warning Level開最高(w4)也沒 warning, 冏
05/15 10:48, 6F

05/15 12:27, , 7F
嗯,是我看錯,第二個可以
05/15 12:27, 7F

05/15 13:01, , 8F
阿 第二個要這樣 *(static_cast<A*>(this))=A(x)
05/15 13:01, 8F

05/15 13:01, , 9F
雖然試了一下不會蓋掉vptr 但說真的沒什麼把握XD
05/15 13:01, 9F

05/15 13:43, , 10F
轉型有必要? 跟vptr有關係? 只是Copy Assignment吧?
05/15 13:43, 10F

05/15 18:15, , 11F
忘記orz 我是說如果用繼承的話...
05/15 18:15, 11F

05/15 18:38, , 12F
coldstars: 我這邊是設定A是derived class 所以this的type
05/15 18:38, 12F

05/15 18:39, , 13F
本來就是A*了 你指的是不是*(static_cast<B*>(this))=B(x);?
05/15 18:39, 13F

05/16 00:11, , 14F
是的!
05/16 00:11, 14F

05/16 02:44, , 15F
等同這樣? B* pb = this; *pb = B(x);
05/16 02:44, 15F

05/17 11:23, , 16F
不過B那個不是原po自己沒辦法動的嗎?
05/17 11:23, 16F
文章代碼(AID): #1BxQj1Sm (C_and_CPP)
文章代碼(AID): #1BxQj1Sm (C_and_CPP)