この回答が既にこのサイトにある場合は申し訳ありませんが、私はすべてを調べましたが、問題の解決策が見つかりませんでした. 継承されたクラスからの同名関数に関係します。これが私のコードです:
class A
{
public:
int foo(int c) { c = c+1; return c; };
};
class B : public A
{
public:
int foo(int c) { c = c-1; return c; };
};
int main()
{
A array[2];
array[0] = A item1;
array[1] = B item2;
for (int n=0;n<2;n++)
{
cout << array[n].foo(10) << endl;
}
return 0;
}
次の出力が期待されます。
11 // foo() from A class [10 + 1 = 11]
9 // foo() from B class [10 - 1 = 9 ]
しかし、代わりに私は得る
11
11
これをテストしたところ、B クラスの foo() 関数が for ループ内で呼び出されないことがわかりました。代わりに、A クラスの foo() 関数が、配列 [1] の B オブジェクトでも呼び出されます。
これは、A クラスのオブジェクトのみを含むように配列を定義したためですか? もしそうなら、B クラスの foo() 関数をその for ループ内の 2 番目のオブジェクトで呼び出す方法はありますか?
助けてくれてありがとう!