質問

異種リストを介して仮想関数を呼び出すときに、メンバーデータに値を割り当てる方法を考え出しています。

私がしようとしていることの例:

class A
{
 protected:
 virtual void func1();

 private:
 A * list;
}

class B: public A
{
 protected:
 void func1();

 private:
 int i1, i2;
}
.

メイン():

list = new A[10];

list[0] = new B;

list[0]->Func1();
.

FUNC1()の宣言:

void B::Func1()
{
 int a, b;

 cin >> a >> b;

 list[0]->i1 = a;
 list[0]->i2 = b;

 // or can I just do this:
 // i1 = a;
 // i2 = b;
}
.

主クラスのポインタを介して呼び出す場合、派生クラスの関数内の派生クラスのメンバーデータにアクセスするための適切な方法を探しています。あらゆる助けが大歓迎です!

役に立ちましたか?

解決

virtual関数を実行しているときに、オブジェクトの種類はクラスの種類であることが、その関数がその関数で定義されているか、またはその列のクラスです。つまり、B::func1()関数では、thisオブジェクトを指しています。オブジェクトは、Bから派生したタイプのものであり得るが、まだBに存在するすべてのものを持っています。

その一方で、Blist[0]オブジェクトを指すと静的に知らないは静的に知られています。コードでコメントしていないコードは機能しません。コメントコードはOK

です

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top