gpt4 book ai didi

c++ - 从抽象基类成员函数调用纯虚函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:35:18 25 4
gpt4 key购买 nike

因此,基于粗略的搜索,我已经知道从构造函数调用虚函数(纯或其他)是行不通的。我已经重组了我的代码以确保我没有这样做。虽然这会导致我的类的用户在他们的代码中添加额外的函数调用,但这真的没什么大不了的。也就是说,他们现在不再在循环中调用构造函数,而是调用函数(实际上!)提高了代码的性能,因为我们不需要每次都构建和销毁相关对象。

然而,我偶然发现了一些有趣的事情......

在抽象类中我有这样的东西:

// in AbstractClass.h:
class AbstractClass {
public:
AbstractClass() {}
virtual int Func(); //user can override
protected:
// Func broken up, derived class must define these
virtual int Step1() = 0;
virtual int Step2() = 0;
virtual int Step3() = 0;
// in AbstractClass.cpp:
int AbstractClass::Func() {
Step1();
// Error checking goes here
Step2();
// More error checking...
// etc...
}

基本上,纯虚函数大部分时间都遵循一个通用结构,但如果它们不遵循,则 Func() 是虚函数并允许派生类指定顺序。但是,每个步骤都必须在派生类中实现。

我只是想确定我在这里没有做错什么,因为 Func() 函数调用纯虚拟函数。也就是说,使用基类,如果调用 StepX(),就会发生不好的事情。但是,通过创建派生对象然后调用派生对象上的 Func()(例如 MyDerivedObject.Func();)来使用该类,应该正确重载所有纯虚函数。

按照此方法,我是否遗漏了什么或做错了什么?感谢您的帮助!

最佳答案

Func 调用的是虚的,不是纯虚的。您必须使用范围运算符来限定调用,即 AbstractClass::Step1() 以调用 THAT(虚拟纯)函数。由于您不是,您将始终通过派生类获得实现。

关于c++ - 从抽象基类成员函数调用纯虚函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17416101/

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