【发布时间】:2014-12-27 12:47:02
【问题描述】:
在 C++ 下有没有办法让对象方法继承像构造函数继承一样起作用? 让我们有以下内容:
(myclass.h)
class B{
public:
B();
void doSomething();
};
class A : public B{
public:
A();
void doSomething();
}
(myclass.cpp)
B::B()
{
executeBCode();
}
void B::doSomething()
{
executeBCode();
}
A::A : B()
{
executeACode();
}
void A::doSomething()
{
executeACode();
}
调用 A 构造函数时会发生什么,我执行executeBCode(),然后执行executeACode()。在 A 对象上调用 doSomething() 方法时,我只执行 executeACode(),因为它已被覆盖。
有没有办法让方法的继承行为类似于构造函数的继承,因此同时执行派生代码和基础代码?
我遇到这个问题是因为我需要代码中的基类为其派生类做一些事情,而且派生类应该执行自己的指令:这只是在派生类上调用doSomething() 函数。
例如,在 A 上调用 closeAll() 方法可能就是这种情况,其中基类关闭其自己的基对象并派生其特定的东西。
【问题讨论】:
-
您可以将对
B::doSomething();的调用添加到void A::doSomething()函数。否则调查template method pattern。 -
在 A 上调用
B::doSomething();意味着继承无效。我无法理解为什么它没有在 C++ 语言中使用基本方法上的关键字实现。也许在其他编程语言中也是如此...... -
doSomething没有被覆盖,它只是被另一个同名的函数隐藏了。覆盖意味着替换一个虚函数,而你没有虚函数。 -
“意味着继承在无用” 这是一个完全愚蠢的说法。继承有很多用途,它不做你想做的一件事的事实并不意味着它“无用”。基类必须被创建和销毁,因此对其构造函数和析构函数的调用有时会隐式发生。基类函数必须被调用是不正确的,因此当派生类中碰巧有具有相同签名的函数时,对它们的调用不是隐式的,您需要显式调用基函数.
-
"表示继承在无用" ...解决这个具体情况。由于建议的解决方案之一是直接调用基本函数
标签: c++ inheritance