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 回答