【初心者歓迎】C/C++室 Ver.99【環境依存OK】 [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0353デフォルトの名無しさん
2016/09/08(木) 13:08:23.79ID:nnNTpHVe#include <iostream>
using namespace std;
class A { public: virtual void func() {cout << "A::func()" << endl;} };
class B: public A { public: void func() {cout << "B::func()" << endl;} };
class C: public B { public: void func() {cout << "C::func()" << endl;} };
int main()
{
A a;
B b;
C c;
A* ar[] = { &a, &b, &c };
B* br[] = { &b, &c };
cout << "Call directly" << endl;
a.func(); b.func(); c.func();
cout << "Call from A*" << endl;
ar[0]->func(); ar[1]->func(); ar[2]->func();
cout << "Call from B*" << endl;
br[0]->func(); br[1]->func();
return 0;
}
A* の配列でオーバーライドされてるのは当然として、
B* の配列経由でもオーバーライドされてるのが分かると思う。
少なくとも、手元の環境ではオーバーライドされた。
■ このスレッドは過去ログ倉庫に格納されています