gpt4 book ai didi

c++ - 从基类调用派生类函数

转载 作者:IT老高 更新时间:2023-10-28 22:33:42 24 4
gpt4 key购买 nike

class base
{
public:
virtual void start();
virtual void stop();

void doSomething() { start(); .... stop(); }
}

class derived : public base
{
public:
void start();
void stop();
}

但是当我在派生类中调用 doSomething() 时,它使用的是它自己的 Start()Stop() 定义 -不是派生的。

我不想在派生类中重写 doSomething(),因为它与基类相同。我做错了什么?

抱歉,如果不清楚。
派生类中 Start() 和 Stop() 的行为是不同的(它是不同的机器) - 但我想使用原始基类 doSomething() 因为它没有改变。它只需要使用新的派生类代码 start() 和 stop()。

最佳答案

您发布的代码应该按照您想要的方式工作。调用doSomethingderived 的实例上将调用被覆盖的 startstop derived 中定义的函数.

不过,有一个异常(exception)。如果您调用doSomethingbase 的构造函数或析构函数中(无论是直接还是间接),那么 start 的版本和 stop被调用的将是 base 中定义的那些。 .那是因为在这种情况下,您实际上没有有效的 derived实例呢。它要么未完全构造,要么部分破坏,因此该语言会阻止您调用将使用部分对象的方法。

如果您不是从 base 调用它构造函数或析构函数,那么问题比这里显示的要多。

关于c++ - 从基类调用派生类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4869216/

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