C++ 调用超类上不存在的子类函数

C++ 调用超类上不存在的子类函数,c++,inheritance,polymorphism,C++,Inheritance,Polymorphism,假设我有一个班上的人,和它的子班男孩。我想在Boy中包含一种Person没有的方法,并且能够通过多态性以以下方式使用: Boy john = Boy(); Person* personP = &john; personP->boyFunction(); 我已经尝试将函数亲自声明为virtual and=0(在头文件中)。问题是我有多个函数,比如这个函数,我不希望所有子类都定义所有这些函数 假设我想有多个不同的Person子类,每个子类都有一个自己独有的函数,那么这是如何做到整洁

假设我有一个班上的人,和它的子班男孩。我想在Boy中包含一种Person没有的方法,并且能够通过多态性以以下方式使用:

Boy john = Boy();
Person* personP = &john;

personP->boyFunction();
我已经尝试将函数亲自声明为virtual and=0(在头文件中)。问题是我有多个函数,比如这个函数,我不希望所有子类都定义所有这些函数


假设我想有多个不同的Person子类,每个子类都有一个自己独有的函数,那么这是如何做到整洁和安全的呢。这取决于您希望调用
boyFunction()
的具体情况。如果您知道它必须是一个
男孩*
,那么您应该要求获得一个
男孩*
。否则

最直接:演员阵容(尽管这可能是设计不佳的表现),如果适用,只调用
boyFunction()

Boy* boy = dynamic_cast<Boy*>(personP);
if (boy) {
    boy->boyFunction();
}
为什么要调用
boyFunction()
?也许这是一些更大的算法的一部分。。。因此,用一个更大的动态方法包装您想要做的事情:

personP->performSomeFunction();
可能的地方:

void Boy::performSomeFunction() {
    a();
    b();
    boyFunction();
    c();
}
但是


. 你不能“整洁而安全地”违反法律,根本没有这样的选择。如果每个函数都是自己独有的,为什么不使用普通的多态性和虚拟函数呢<代码>类Person{public:virtualvoid Foo()=0;}
类男孩{public:virtualvoidfoo();}
类女孩{public:virtualvoidfoo();}
void Boy::performSomeFunction() {
    a();
    b();
    boyFunction();
    c();
}
void Doctor::performSomeFunction() {
    doSurgery();
}