class a //my base abstract class
{
public:
virtual void foo() = 0;
};
class b : public a //my child class with new member object
{
public:
void foo()
{}
int obj;
};
int main()
{
b bee;
a * ptr = &bee;
ptr->obj; //ERROR: class a has no member named "obj"
}
私の質問は、子クラス( "a")を指すベースクラス( "a")へのポインタを持っていると "obj" ")オブジェクト?キャスティングはそのトリックをすべきだと知っていますが、私はより良い解決策を探しています。基本クラスへのポインタを使用して子クラスメンバにアクセスする
いくつかのコンテキストが役立ちます。なぜそれをしたいのですか?キャストがオプションでない場合、派生クラスに仮想関数オーバーライドを持たなければならず、そのメンバへの参照またはポインタが返されます。しかし、それは一般的にカプセル化を破壊する。これにより、派生したクラスメンバに基本クラスへのポインタを使用してアクセスする必要がある理由がわかります。 – Void
@Voidおそらくあなたは正しいです、私はデザインを変更する必要があります。 – user1873947