【词条】虚函数
来源:互联网 发布:人工智能开发入门 编辑:程序博客网 时间:2024/04/27 15:04
多态性
指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。C++支持两种多态性:编译时多态性,运行时多态性。
a.编译时多态性:通过重载函数实现
b 运行时多态性:通过虚函数实现。
包含纯虚函数的类称为抽象类。由于抽象类包含了没有定义的纯虚函数,所以不能定义抽象类的对象。
(1)疑问:如果说需要把基类的析构函数设置为虚函数的话,那么在销毁的时候就能正确的调用子类的析构函数,但是如果基类也有东西需要释放怎么办?
#include <iostream>using namespace std;class A{public:virtual void foo() {cout << "A:foo()" << endl;}virtual ~A(){cout << "~A()" << endl;}};class B :public A{public: void foo(){cout << "B:foo()" << endl;}~B(){cout << "~B()" << endl;}};int main(){A *a = new B();a->foo();delete a;return 0;}
执行结果:
B:foo()
~B()
~A()
可以看出,虚析构函数的调用和普通的虚函数调用是不同的,如果基类的析构函数设置为虚函数,那么不仅会实现多态,还可以自动调用基类的析构函数。
(2)疑问:虚函数是否有继承性呢?
#include <iostream>using namespace std;class A{public:virtual void foo() {cout << "A:foo()" << endl;}};class B :public A{public: void foo(){cout << "B:foo()" << endl;}};class C:public B{public: void foo(){cout << "C:foo()" << endl;}};int main(){B *a = new C();a->foo();return 0;}
结果执行结果:C:foo()
可以得出,虽然类B的foo()没有显示指定为虚函数,但是仍然实现了多态性,因此,虚函数是可以继承的。
- 【词条】虚函数
- 词条查询
- 编辑词条
- 一些词条
- 百度词条
- 【词条】_tmain
- 百度词条
- 【词条】const
- IT ---词条
- OpenSessionInView词条
- 滚动词条
- malloc函数 编辑词条 B 添加义项 ? extern void *malloc(unsigned int num_bytes) 30 本词条 正文无图片, 无基本信息模块, 正文缺少必要目录
- 词条搜索界面
- 编辑词条POSIX
- 编辑词条两线制变送器
- “逻辑思维”相关词条
- awk 百度词条解释
- Wikipedia词条翻译:Python
- JDK1.7新特性
- 数据库中游标
- TCP/IP协议头部结构体
- 小日本的相机镜头有感
- NDK学习 登录逻辑 C调用java方法
- 【词条】虚函数
- Android 手机震动功能实现
- 简单OA项目笔记(5):生成、下载excel格式的动态表格(POI)
- 数对之差的最大值[算法]
- asp中实现sql事务登录_增删改查
- 学习jQuery必须知道的几种常用方法
- Linux线程属性及优先级设置
- hdu3340 线段树之多边形分解
- 数据库死锁原因及解决办法