4
 class subscriber
 {
 public:
      virtual void update() = 0;
 }

 class entity : public subsriber
 {
 public:
      virtual void update() = 0;
 }

 class myObject : public entity
 {
 public:
      virtual void update()
       {
        do_things();
       }
 }

 subscriber * ptr = new myObject; //will use shared_ptr, but here i want simplicity

  ptr->update(); 

問題は、適切な更新関数(myObjectに実装されている関数)が呼び出されるかどうかです。また、1つの「ファミリ」に同じ名前の2つの純粋仮想関数を含めることは有効ですか?

4

2 に答える 2

6

適切な更新関数 (myObject に実装されている関数) が呼び出されますか?

はい、呼ばれます。

1 つの「ファミリ」に同じ名前の 2 つの純粋仮想関数を含めることは有効ですか?

2 番目の宣言 (つまり、entityクラス内) は、2 番目の純粋仮想関数をファミリに導入しません。シグネチャは同一であるためupdate()、単一の仮想関数です。さらに、2 回目の宣言は必要ありません。2 回目の宣言を削除した場合でもentity、抽象化されたままになり、メソッドにアクセスできます。update()

于 2013-01-20T12:06:07.417 に答える
1

仮想関数または仮想メソッドは、同じシグネチャを持つ関数によって継承クラス内で動作をオーバーライドできる関数またはメソッドです。

したがって、答えはイエスです。

于 2013-01-20T12:08:51.090 に答える