- ベストアンサー
親クラスのポインタ、クラスを指定しないポインタ
- 親クラスAと子クラスB-1、B-2のポリモーフィズムについての質問です。
- クラスCを作成し、iniファイルによってB-1かB-2を実体化する方法を知りたいです。
- また、クラスCではZメソッドやWメソッドは書けないと思っていますが、認識は正しいでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> その際、クラスCは、どうやってもZのメソッドや、Wのメソッドは書けない認識です。 dynamic_castでは解決にならんですか? > 逆に、XとYについては、それぞれ挙動の違う処理を行わせることができる認識です。 こんなこと訊くまでもないでしょう。やってみりゃわかる。 #include <iostream> using namespace std; class A { public: virtual void x() =0; virtual void y() =0; }; class B1 : public A { public: virtual void x() { cout << "B1::x()\n"; } virtual void y() { cout << "B1::y()\n"; } virtual void z() { cout << "B1::z()\n"; } }; class B2 : public A { public: virtual void x() { cout << "B2::x()\n"; } virtual void y() { cout << "B2::y()\n"; } virtual void w() { cout << "B2::w()\n"; } }; class C { public: A* create(int n) { A* result; switch ( n ) { case 1: result = new B1(); break; case 2: result = new B2(); break; default: result = nullptr; break; } return result; } }; void test(A* p) { p->x(); p->y(); B1* p1 = dynamic_cast<B1*>(p); if ( p1 ) p1->z(); B2* p2 = dynamic_cast<B2*>(p); if ( p2 ) p2->w(); } int main() { C c; A* p; p = c.create(1); test(p); delete p; p = c.create(2); test(p); delete p; }
お礼
ありがとうございます! 短時間で、すごいです! 先ほど実行してみました。 こういうのをやりたかったです。 ありがとうございます!