假设我有一个Person类,它的子类是Boy。我希望在没有的人的男孩中包含一个方法,并且能够通过以下方式通过多态来使用:
Boy john = Boy();
Person* personP = &john;
personP->boyFunction();
我尝试将Person中的函数声明为virtual和= 0(在头文件中)。问题是我有多个这样的函数,我不希望所有子类都定义所有这些函数。
如果我想拥有多个不同的 Person子类,每个人都拥有一个独有的函数,这样做怎么做得整齐安全呢?
答案 0 :(得分:0)
你有选择。这取决于你想要调用boyFunction()
的具体情况。如果您知道已为Boy*
,那么您应该要求获得Boy*
。否则...
最直接:演员(尽管这可能表明设计不佳),如果适用,只调用boyFunction()
:
Boy* boy = dynamic_cast<Boy*>(personP);
if (boy) {
boy->boyFunction();
}
不那么直接,污染更严重:
class Person {
// ...
virtual void boyFunction() { } // probably not = 0;
}
class Boy : public Person {
// ...
void boyFunction() { /* do stuff */ }
};
personP->boyFunction();
您为什么要拨打boyFunction()
?也许它是一些更大算法的一部分...所以用更大的动态方法包装你想做的事情:
personP->performSomeFunction();
哪里可能:
void Boy::performSomeFunction() {
a();
b();
boyFunction();
c();
}
但
void Doctor::performSomeFunction() {
doSurgery();
}