gpt4 book ai didi

C++ : calling an Abstract method inside an abstract class

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

我有一个包含两个类(一个抽象类,一个非抽象类)的抽象类。我想从非抽象方法中调用抽象方法。

这就是我想要做的:

class abstractClass { 
public:
virtual void abstractMethod() = 0 ;
void nonAbstractMethod();
}

在 .cpp 中:

void abstractClass::nonAbstractMethod() {
abstractClass::abstractMethod();

/* ... */

}

用c++可以吗?

这里的问题是 nonAbstracMethod 不是静态的,所以我不能在没有对象实例的情况下调用它。但这是一个抽象类!我无法实例化它...我该如何管理它?

我经常在 java 中这样做,但我没有发现在 c++ 中如何...

最佳答案

具体的子类将提供它们的 abstractMethod() 版本。通过虚拟调用机制,当使用具体子类的实例调用 nonAbstractMethod() 时,将调用 abstractMethod() 的正确实现。也就是说,如果您不使用类型名称限定该方法(您可以这样做,只要您还在 abstractClass* 中提供实现)。

您应该记住将 abstractClass 中的析构函数设为虚拟,以便在通过 abstractClass 指针删除对象时调用正确的析构函数。

另外,你应该知道 memeber 函数是静态绑定(bind)在构造函数\析构函数中的。否则,您会调用方法,期望对象的某些部分尚未构建或已被破坏。

这是面向对象编程101

*是的,纯虚函数可以有实现。

关于C++ : calling an Abstract method inside an abstract class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24269312/

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