質問

私は別の1からクラスを派生し、機能を上書きする場合は、

、私は、派生クラスでBase::myFunction()の実装内myFuncを呼び出すことにより、基本機能を呼び出すことができます。

However-基本機能はどのような場合に呼び出されたというのが私のBaseクラスで定義する方法は、また、それが上書きされた関数の中で明示的に呼び出さなくても、あるのでしょうか? (前または後のいずれかで実行導関数)

またはより良い、私は私の仮想Baseクラスの仮想関数を持っている、と2つのプライベート関数のbefore()after()を実施した場合、それはその前に、これBaseのいずれかの派生クラス内の関数の後Baseクラスで定義することが可能ですクラスが呼び出され、before()after()が呼ばれるのですか?

ありがとうございます。

役に立ちましたか?

解決

いいえ、これは不可能です。
しかし、あなたはそのような別の仮想関数を呼び出すことによって、それをシミュレートすることができます:

class Base
{
public:
  void myFunc()
  {
    before();
    doMyFunc();
    after();
  }

  virtual void doMyFunc() = 0;
};

他のヒント

あなたはベースのメソッドをオーバーライド/過負荷派生クラスを防ぐためにしようとしています。あなたは「オーバーライドではない」(言語に依存)などのメソッドをマークすることによって、それを奨励することができますが、それを回避する方法が常にあります。

言い換えれば、あなただけの彼らにそれが使用されるべき方法を教えて、特定の方法で、あなたのクラスを使用するために誰かを強制することはできません。

C ++のために答え、あなたが継承された機能を持つことができません「目に見えない」あなたが望む方法で呼び出されます。

継承したクラスを介してダウンを呼び出すだけの方法はコンストラクタとデストラクタがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top