我有一个接口(interface)也有一个普通的方法,那我该如何调用它呢?
class Animal{
virtual void virtualFunction()=0;
}
class Cow : Animal{
virtual void virtualFunction(){}
void nonVirtualFunction(){}
}
class main{
Animal *a = new Cow();
a->virtualFunction();
}
^:这行得通,但是当我这样做时...
a->nonVirtualFunction();
它说 Animal 类没有这个方法,我当然知道, 但是什么方式最好调用该方法?
最佳答案
如果您要调用属于 Cow
成员的函数,请不要首先将其存储在多态 Animal
指针中:
Cow* c = new Cow();
c->nonVirtualFunction();
如果要在 Cow
中使用 Cow
,则将 Cow
存储在 Animal*
中没有意义-具体方式。
您可以使用dynamic_cast
在运行时检查对象的动态类型:
Animal* a = new Cow();
if (Cow* c = dynamic_cast<Cow*>(a)) {
c->nonVirtualFunction();
}
但是,这通常是糟糕设计的标志。
关于C++从已实现的虚拟类调用非虚拟方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15502302/