如何删除继承自基class的纯虚函数?
How do I delete a pure virtual function inherited from base class?
假设我有一个名为 Human
的碱基 class。 Baby
和 Adult
是 Human
的子 class。 Human
有一个函数 run
作为纯虚函数,我不希望 Baby
继承 run
但如果我不覆盖 run
,Baby
将成为 摘要 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()
是非法的。
假设我有一个名为 Human
的碱基 class。 Baby
和 Adult
是 Human
的子 class。 Human
有一个函数 run
作为纯虚函数,我不希望 Baby
继承 run
但如果我不覆盖 run
,Baby
将成为 摘要 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()
是非法的。