如何删除从基类继承的纯虚函数?

Ch3*_*teR 5 c++ oop pure-virtual

假设我有一个名为Human. Baby并且Adult是 的子类HumanHuman有一个run作为纯虚函数的函数,我不想Baby继承run但如果我不覆盖runBaby将成为一个抽象类。

class Human{
 public:
   // Some human attributes.
   virtual void run()=0;
};

class Adult: public Human{
 public:
   void run(){
      // Adult running function
   }
};

class Baby: public Human{
 public:
   void run()=delete; //error

   // If I don't override `run` then Baby is marked as an abstract class

   void crawl(){
     // Baby crawling function.
   }
};
Run Code Online (Sandbox Code Playgroud)

如果我标记run为错误=delete

prog.cpp:19:10: error: deleted function ‘virtual void Baby::run()’
     void run()=delete;
          ^~~
prog.cpp:6:22: error: overriding non-deleted function ‘virtual void Human::run()’
         virtual void run()=0;
                      ^~~
Run Code Online (Sandbox Code Playgroud)

可能是一个不好的例子,但我想要的是继承除runin之外的所有内容Baby。是否可以?


免责声明:我没有在任何地方实施它。只是出于好奇。

Bil*_*nch 10

这不可能。考虑以下代码:

Human *CreateAPerson() {
  return new Baby();
}

int main() {
  Human *human = CreateAPerson();
  human->run();
}
Run Code Online (Sandbox Code Playgroud)

编译器将无法知道这human->run()是非法的。