// ( c17.C ) // 多重継承を使う−その1 // #include class A { public: virtual char* get() { return "I am A" ; } } ; class B { public: virtual char* get() { return "I am B" ; } } ; class AB:public A,public B { // よくない多重継承のクラス定義 } ; class AB2:public A,public B { // よい多重継承のクラス定義 public: char* get() { return "I am AB" ; } } ; main() { AB* a1 = new AB ; cout << ( (A*)a1 )->get() << "\n" ; // I am A // cout << a1->get() << "\n" ; これはダメ、どれなのか分からない delete a1 ; AB2 a2 ; cout << a2.get() << "\n" ; // I am AB AB a3 ; // 暗黙の型変換を使う B &t = a3 ; cout << t.get() << "\n" ; // I am B A* f = &a3 ; cout << f->get() << "\n" ; // I am A } /* [結果] I am A I am AB I am B I am A */