2016-06-21 5 views
2

は言う、アクションC++の抽象クラスで抽象関数を使用できますか?私は抽象メソッドを持つクラスを構築するため

virtual double action (int num1,int num2) const = 0; 

、その後は同じクラスのメンバ関数を記述すると言う、それは可能ですevalの

double eval() const 
    { 
    .. 
    //In here we use function "action" 
    .. 
    } 

ため、一方ではクラスは抽象クラスなので、インスタンスを作成できないため、抽象関数を実行することはありません。一方、それはないかもしれませんか?

この質問の最後のゲームは、自分のクラスを継承する次のクラスに関数を書き留めないことです。関数evalを書くのは便利です。

答えて

4

はい、これは合法です。 actionevalの中から呼び出された場合は、実際にはevalが呼び出されている実際のオブジェクトの動的型の最終オーバーライドに送出されます。これは必ず具体的(抽象的ではない)型です。

+0

ありがとうございます! :)このサイトが私に – Michael

1

はい、これは可能です。これはTemplate Method Patternと呼ばれています。名前はむしろ混乱しています。なぜなら、(C++の意味で)テンプレートは含まれていないからです。サブクラスがより大きな計算の一部を専門化する場合(たとえば、あなたの例のように)は役に立ちます。

+0

に私をさせてくれるとすぐに答えを受け入れるでしょうなぜこの質問に何か問題があれば私は何を知りたいのですか? – user463035818

関連する問題