[問題] C++ 我該怎麼達到重新construct一個物件的效果?

看板C_and_CPP (C/C++)作者 (上大學好忙喔)時間16年前 (2010/05/14 21:09), 編輯推噓4(403)
留言7則, 3人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 若我現在有一個 class A 的物件叫做 a 我想要利用這樣的method: a.read(istream& in); 或 in >> a; (其實應該是差不多意思) 把讀入的資料parse過後存成自己 可是問題是 我的資料有一部份是繼承自parent的 但parent並沒有提供類似method 也沒有提供寫入或修改那個data member的method 簡單來說就是 parent對自己的概念是 建立了之後就不能變 那我有辦法達到我想要的效果嗎? 就我所知 重新呼叫constructor是錯誤的 但我又沒有辦法設定那些data member 是否唯一的方法是在client端(使用class A的地方)重新建構一個新的A呢? 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) ansi c++ 有問題的code: (請善用置底文標色功能) class A : public B { public: A(SomeType x):B(x), _y(0){} void read(istream& in); private: int _y; }; void A::read(istream& in) { SomeType x; in >> x; //想把x變成自己的(B的)一部分,該如何重新建構? } 補充說明: 我沒辦法把B當作自己的一個member(而非繼承) 因為B有很多method我希望可以直接拿來用 而不用重包一次 這樣的狀況該如何解呢?麻煩各位幫忙解個惑 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.154.15

05/14 22:46, , 1F
std::swap(A(x), *this); // 這樣?
05/14 22:46, 1F

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

05/15 00:52, , 3F
這樣更好! swap裡做了些沒必要做的事
05/15 00:52, 3F

05/15 03:24, , 4F
繼承然後不要override 這樣如何呢?
05/15 03:24, 4F

05/15 03:34, , 5F
sorry 我誤解了你的意思 感覺 factory pattern 可以達成
05/15 03:34, 5F

05/15 18:18, , 6F
elfkiller: 我要的不是產生物件 而是讓物件重新建構自己,
05/15 18:18, 6F

05/15 18:18, , 7F
不曉得我是不是誤會你的意思了?
05/15 18:18, 7F
文章代碼(AID): #1BxKkDGk (C_and_CPP)
文章代碼(AID): #1BxKkDGk (C_and_CPP)