質問があります: 抽象クラスから派生したクラスでnon_virtual関数を実装するにはどうすればよいですか?たとえば:C++多態性と非仮想関数
class A {
public:
virtual void foo() = 0;
};
class B : public A{
public:
virtual void foo() {
/* some code */
}
//B function
void Bfoo(){
/* some code */
}
};
int main(){
A* a = new B;
a -> foo();
a -> Bfoo();
return 0;
}
グラム++取得します:多型を使用し、非仮想関数を使用する方法は
error: ‘class A’ has no member named ‘Bfoo’
a -> Bfoo();
ありますか?
EDIT
私はエラーが出るように、AはBfoo()
機能を持っていないことを知っています。私はこの疑問を尋ねました。なぜなら、いつ有用なポリモーフィズムがいつ使われるのか分からなかったからです。
私の答えは次のようになります。
私の派生クラスは、すべて同じ機能を持っており、一つの共通の基本クラスから派生したときに、私はポリモーフィズムを使用しています。
しかし、クラスに他の関数がある場合、多型はなくなりますか?
あなたは何が起こると思いますか? 'A'にはそのようなメソッドはありません。なぜ、あなたが' A'へのポインタから呼び出すことができないのかは明らかです。これはXYの問題のように聞こえるので、達成しようとしていることを説明してください。 – Rotem
'((B *)a) - > Bfoo()'? –
@PatrickRobertsこの修正は機能しますが、多型の意味が強すぎます。 '((B *)a) - > Bfoo()'を使うと、 'A * b = new B'の代わりに' B * a = new B'を使うことができます。 – linofex