私は別のクラスから派生したクラスを持っていますが、派生クラスのインスタンスを保持するためにベースクラスポインタの配列を使用しますが、ポインタの表記で派生クラスに属するメンバーにアクセスすることはできません。単純なコマンドでこれらのメンバーにアクセスすることはできますか?または、基本クラスを書き換えてメンバを定義し、派生クラスでのみ使用する必要がありますか?ベースクラスのポインタから派生クラスのメンバにアクセス
例:あなたは、オブジェクトがによって指さコンパイラに指示しませんでした:私はポインタ表記で派生クラスに属するメンバーにアクセスすることはできません
class A {
public:
int foo;
};
class B : public A {
public:
char bar;
};
class C : public A {
int tea;
};
int main() {
A * arr[5];
arr[0] = new B;
char test = arr[0]->bar; //visual studio highlights this with an error "class A has no member bar"
return 0;
}
私が知る限り、派生クラスのメンバーには基本クラスのポインタからアクセスできません。とにかく基本クラスがそれを認識しないからです。ただし、基本クラスのメンバーは派生クラス**のメンバーになりますので、派生クラスのポインタから基本クラスのメンバーにアクセスできます。 –
しかし、データは技術的に正しく存在していますか?それを行うためにメモリオフセットを使用できますか? – Stephen
これは仮想メソッドのためのものです。 C++クラスの仮想メソッドについてまだ学習していない場合は、これを実行する絶好の機会です。 –