#include<iostream>
using namespace std;
class Abs
{
public:
virtual void hi()=0;
};
class B:public Abs
{
public:
void hi() {cout<<"B Hi"<<endl;}
void bye() {cout<<"B Bye"<<endl;}
};
class C:public Abs
{
public:
void hi() {cout<<"C Hi"<<endl;}
void sayonara() {cout<<"C Sayonara"<<endl;}
};
int main()
{
Abs *bb=new B;
bb->bye();
Abs *cc=new C;
cc->sayonara();
}//main
コンパイラは言う
test2.cpp: In function ‘int main()’:
test2.cpp:26: error: ‘class Abs’ has no member named ‘bye’
test2.cpp:28: error: ‘class Abs’ has no member named ‘sayonara’
この問題のため、Abs クラスから継承する新しい派生クラスを作成するたびに、Abs クラスに関数を追加する必要があります (アップキャストは必須です。私が計画しているプログラムでは、そうする必要があります)。一度作成された基本クラスには触れたくありません。この問題は、基本クラスを作成すると、それを変更する必要がないという原則に違反していませんか。この問題を解決する方法はありますか? ps: 工場設計パターンとプロトタイプ設計パターンを見てきましたが、どちらも解決できないようです。