如何删除继承自基class的纯虚函数?

How do I delete a pure virtual function inherited from base class?

假设我有一个名为 Human 的碱基 class。 BabyAdultHuman 的子 class。 Human 有一个函数 run 作为纯虚函数,我不希望 Baby 继承 run 但如果我不覆盖 runBaby 将成为 摘要 class.

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.
   }
};

如果我用 =delete

标记 run 会出错
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;
                      ^~~

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


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

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

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

int main() {
  Human *human = CreateAPerson();
  human->run();
}

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