gpt4 book ai didi

C++从已实现的虚拟类调用非虚拟方法

转载 作者:太空宇宙 更新时间:2023-11-04 16:22:20 25 4
gpt4 key购买 nike

我有一个接口(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com