1

C ++プログラムの場合:

              #include<iostream.h>
              class A
              {
                     public: virtual void func()=0;
              };
              class B:public A
              {
                     public: void show()
                             {
                                   func();
                             }
              };
              void B::func()
              {
                      cout<<"In B"<<endl;
              }
              int main()
              {
                   B b;
                   b.show();
              } 

仮想関数func()がクラスBの本体内で再定義されている場合、エラーは発生しません。ただし、スコープ解決演算子を使用すると、コンパイラーはエラーをスローします。何故ですか?

4

2 に答える 2

13

これは仮想であることとは直接関係ありませんfunc。常にクラスで宣言する必要があります。

class B:public A
{
   public: void show()
   {
      func();
   }

   void func();  // add this
};

void B::func()
{
   cout<<"In B"<<endl;
}
于 2009-12-10T10:17:28.967 に答える
4

クラス B でメンバ関数 func() を再定義することを宣言する必要があります。

class B:public A
{
   virtual void func();
public:
   void show() {func(); }
};
于 2009-12-10T10:19:34.420 に答える