異種リスト、仮想関数、およびメンバーデータ
-
20-12-2019 - |
質問
異種リストを介して仮想関数を呼び出すときに、メンバーデータに値を割り当てる方法を考え出しています。
私がしようとしていることの例:
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
に存在するすべてのものを持っています。
その一方で、B
がlist[0]
オブジェクトを指すと静的に知らないは静的に知られています。コードでコメントしていないコードは機能しません。コメントコードはOK
所属していません StackOverflow