C++纯虚函数有正文
答
你假设纯虚函数不能被调用是绝对不正确的。当一个函数被声明为纯虚函数时,它仅仅意味着该函数不能通过虚拟调度机制动态调用。然而,这个非常相同的功能可以很容易地被称为静态,没有虚拟调度。当在呼叫中使用的函数的一个合格的名称被执行以一个虚函数
在C++语言静态调用,当在呼叫指定的功能的名称具有即<class name>::<function name>
形式。
例如
struct S {
virtual void foo() = 0;
};
void S::foo() {
// body for the pure virtual function `S::foo`
}
struct D : S {
void foo() {
S::foo(); // static call to `S::foo` from derived class
}
};
int main() {
D d;
d.S::foo(); // another static call to `S::foo`
}
答
对于大多数纯虚函数,你会是对的。但是,对于纯粹的虚拟析构函数,定义相应的析构函数实际上很重要:
- “纯虚拟”是要求派生类实现其析构函数。
- 您的基类析构函数的实现使派生类的析构函数可以成功地“连锁”。
+8
(我意识到这个答案是一岁,但我只是看到一个链接指向这个问题的人,所以...)你的第一点是错误的,一个纯粹的虚拟析构函数不强制派生类实现析构函数。派生类将始终具有析构函数,即使它是隐式定义的。纯虚拟析构函数的一个优点是,如果它没有其他适合纯虚拟函数的函数,则将它作为抽象类。 – 2012-05-28 18:01:21
答
“有效的C++”迈尔斯提到的理由为纯虚函数 有身体:派生类 实现这个纯虚函数 可以调用这个实现在自己的代码smwhere 。如果部分代码 有两个不同的派生类是 类似,那么即使 函数应该是纯虚拟的,它在层次结构中向上移动 也是有意义的。
参见here。
[实施与纯虚函数]的可能重复(http://stackoverflow.com/questions/2089083/pure-virtual-function-with-implementation) – 2011-03-30 08:13:51
抱歉!我对这个论坛的条款有点新鲜。我已经接受了我所发现的正确答案。感谢suggesssions。 – Vijay 2011-03-31 06:55:30
[纯虚函数与实现]可能重复(https://stackoverflow.com/questions/2089083/pure-virtual-function-with-implementation) – finnw 2017-05-31 12:29:09