作者CrBoy (上大學好忙喔)
看板C_and_CPP
標題[問題] C++ 我該怎麼達到重新construct一個物件的效果?
時間Fri May 14 21:09:30 2010
遇到的問題: (題意請描述清楚)
若我現在有一個 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