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

时间:2021-01-15 06:10:24

标签: c++ oop pure-virtual

假设我有一个名为 Human 的基类。 BabyAdultHuman 的子类。 Human 有一个函数 run 作为纯虚函数,我不希望 Baby 继承 run 但如果我不覆盖 run,{ {1}} 将成为一个抽象类。

Baby

如果我用 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 会出错

=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 之外的所有内容。可能吗?


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

1 个答案:

答案 0 :(得分:10)

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

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

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

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

相关问题