data class
へのメンバポインタを持つuser class
があります。しかし、私はuser
を拡張derivedUser
を実装したいが、それはまた、derivedData class
に格納された追加データを持っている必要があり、それはこのようなものになります。C++ベースクラスポインタを変更する派生クラス
class Data {
/*...the stored data...*/
}
class DerivedData : public Data {
/*...the additional data...*/
}
class User {
public:
/*...some methods that use dp...*/
protected:
Data* dp;
}
class DerivedUser : public User {
public:
/*...even more methods that use ddp...*/
protected:
DerivedData* ddp;
}
しかし、ここでは問題である:道で私をDerivedUser class
は、同じオブジェクトを指す異なるタイプの2つのポインタを格納することになり、最適ではありません。 DerivedUser
には1つのポインタしか格納されておらず、タイプがDerivedData
であることを知っていて、間違ったタイプのデータが与えられていれば失敗します。そして、問題は、これをどのように実装するのですか?
アイブ氏は試してみました:
class DerivedUser : public User {
public:
/*...even more methods that use ddp...*/
protected:
DerivedData* ddp = dynamic_cast<DerivedData*>(dp);
}
AREN」それらのクラスの 'private' /' protected'フィールドを初期化するコンストラクタがありますか?ですから、なぜ適切な型の 'Data'インスタンスのみを受け入れ、フィールドの初期化に使用するコンストラクタを作ることができませんか? –
派生クラスを指すのはなぜですか?仮想関数を使用し、可能であればベースを指すだけです。 – Steve