看板 C_and_CPP 關於我們 聯絡資訊
遇到的問題: (題意請描述清楚) 若我現在有一個 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
flamo:std::swap(A(x), *this); // 這樣? 05/14 22:46
CrBoy:這樣真的行得通嗎?如果可以的話,那能不能用 *this=A(x); ? 05/15 00:44
flamo:這樣更好! swap裡做了些沒必要做的事 05/15 00:52
elfkiller:繼承然後不要override 這樣如何呢? 05/15 03:24
elfkiller:sorry 我誤解了你的意思 感覺 factory pattern 可以達成 05/15 03:34
CrBoy:elfkiller: 我要的不是產生物件 而是讓物件重新建構自己, 05/15 18:18
CrBoy:不曉得我是不是誤會你的意思了? 05/15 18:18