【发布时间】:2011-06-19 15:30:09
【问题描述】:
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()。
【问题讨论】:
-
当然使用自己的定义;这就是工作中的多态性。你的问题不是很清楚,为什么不想调用覆盖的实现?
-
欢迎来到 Stack Overflow。请考虑花更多时间准备您的问题,以便准确地展示您希望讨论的问题。这意味着发布一个简短的、可编译的和可运行的示例。准备好后,从代码编辑器复制并粘贴到浏览器中;不要尝试在浏览器中编写新代码,因为你会犯错误,而且读者也不清楚这些错误是否真的是你的测试用例的一部分。
-
@EdSwangren:我相信他想扩展行为。在这种情况下,在派生类调用 base::start() 中的 start() 和 stop() 的实现中;和 base::stop();分别处理派生的细节。要么,要么使启动和停止纯虚拟,并将常见行为封装在受保护的函数中。
-
@The_drow,如果问题是它使用了错误的函数实现,这显然不是编译器错误。这在编译时不可能知道,因此实际代码必须是可运行的。但总的来说,你是对的——如果问题是它无法编译,那么发布可运行代码的要求就被放弃了。
-
@cpp:你确定这句话说的是你想要它说的话:“但是当我在派生类中调用
doSomething()时,它使用的是它自己的定义Start()和Stop()- 不是派生的。” [强调我的]?因为如果是这样,我什至不明白你的问题是什么。
标签: c++ inheritance virtual