37
A
回答
59
你假设纯虚函数不能被调用是绝对不正确的。当一个函数被声明为纯虚函数时,它仅仅意味着该函数不能通过虚拟调度机制动态调用。然而,这个非常相同的功能可以很容易地被称为静态,没有虚拟调度。当在呼叫中使用的函数的一个合格的名称被执行以一个虚函数
在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`
}
4
对于大多数纯虚函数,你会是对的。但是,对于纯粹的虚拟析构函数,定义相应的析构函数实际上很重要:
- “纯虚拟”是要求派生类实现其析构函数。
- 您的基类析构函数的实现使派生类的析构函数可以成功地“连锁”。
+8
(我意识到这个答案是一岁,但我只是看到一个链接指向这个问题的人,所以...)你的第一点是错误的,一个纯粹的虚拟析构函数不强制派生类实现析构函数。派生类将始终具有析构函数,即使它是隐式定义的。纯虚拟析构函数的一个优点是,如果它没有其他适合纯虚拟函数的函数,则将它作为抽象类。 – 2012-05-28 18:01:21
19
“有效的C++”迈尔斯提到的理由为纯虚函数 有身体:派生类 实现这个纯虚函数 可以调用这个实现在自己的代码smwhere 。如果部分代码 有两个不同的派生类是 类似,那么即使 函数应该是纯虚拟的,它在层次结构中向上移动 也是有意义的。
参见here。
相关问题
- 1. 纯虚函数
- 2. 纯虚函数
- 3. C++ 17中的纯虚函数体?
- 4. C++前向声明和纯虚函数
- 5. 正确放置在默认的纯虚析构函数C++ 11
- 6. 继承和纯虚函数
- 7. 纯虚拟函数调用
- 8. 纯虚函数派生类
- 9. 纯虚函数和继承
- 10. 纯虚函数调用error
- 11. 编译时纯虚函数
- 12. 纯虚函数XCode中
- 13. R6025纯虚函数调用
- 14. Qt纯虚函数错误
- 15. 纯虚函数错误
- 16. C++纯虚方法
- 17. 从父类调用纯虚函数
- 18. “纯虚函数调用”消息框
- 19. Python和纯虚函数错误
- 20. 纯虚拟方法VS.函数指针
- 21. 使用Boost封装纯虚函数:: Python
- 22. 重写纯虚函数时,有没有使用`override`的意思?
- 23. 虚拟函数C++:虚拟函数已经有一个主体
- 24. 带有参数错误练习的非纯虚函数?
- 25. C++ cli纯虚函数重载(或禁用?)
- 26. C++使用纯虚函数实例化抽象类的子代
- 27. 如何在纯虚函数中使用C++类?
- 28. C++共享库:纯虚函数不会导致链接错误
- 29. 在C++中是否可以定义纯虚函数?
- 30. 如何继承纯虚函数的实现C++
[实施与纯虚函数]的可能重复(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