虚函数原理与应用
来源:互联网 发布:生活常识问答软件 编辑:程序博客网 时间:2024/06/16 00:16
虚函数表分析 ==是实现多态的原理==
C++虚函数表剖析 http://blog.csdn.net/lihao21/article/details/50688337
C++ Upcast(向上造型)http://blog.csdn.net/zhang431705/article/details/22106447
动态绑定虚函数,静态绑定非虚函数每个类有一个虚拟表(指针数组,元素是函数指针),在编译阶段赋值
普通虚函数(经常用到)
http://blog.csdn.net/hackbuteer1/article/details/7558868
class A { public: virtual void foo() { cout<<"A::foo() is called"<<endl; } }; class B:public A { public: void foo() { cout<<"B::foo() is called"<<endl; } }; int main(void) { A *a = new B(); a->foo(); // 在这里,a虽然是指向A的指针,但是被调用的函数(foo)却是B的! return 0; }
虚析构
https://baike.baidu.com/item/%E8%99%9A%E6%9E%90%E6%9E%84%E5%87%BD%E6%95%B0/240645?fr=aladdin
http://blog.csdn.net/yapian8/article/details/46418687
http://blog.csdn.net/starlee/article/details/619827
当且仅当类里包含至少一个虚函数的时候才去声明虚析构函数。
class ClxBase{public: ClxBase() {}; virtual ~ClxBase() {}; virtual void DoSomething() { cout << "Do something in class ClxBase!" << endl; };};class ClxDerived : public ClxBase{public: ClxDerived() {}; ~ClxDerived() { cout << "Output from the destructor of class ClxDerived!" << endl; }; void DoSomething() { cout << "Do something in class ClxDerived!" << endl; };};int main(){ ClxBase *pTest = new ClxDerived; pTest->DoSomething(); delete pTest; //如果没有虚析构只会 ,调用基类ClxBase析构}
纯虚函数
类似其他语言抽象类或接口
1. 类不实例,继承后要么是抽象类,要么实现
2. 定义 virtual int A()=0;
问题
1.==为什么构造函数不能是虚构函数.==
构造函数是在创建对象之前初始化,虚函数是动态绑定运行时指定,每个对象拥有一个虚拟指针,构造函数是对象创建之前调用,虚函数是对象实例后才能调用,前后矛盾.
阅读全文
0 0
- 虚函数原理与应用
- 虚函数原理及应用
- 虚函数的的原理及应用
- 虚函数的的原理及应用
- qsort实现原理与应用 指向函数的指针
- 虚函数与虚析构函数原理
- 《COM 原理与应用》
- COM 原理与应用
- 交换机原理与应用
- 交换机原理与应用
- 路由器原理与应用
- NAT原理与应用
- swi原理与应用
- 数据库原理与应用
- NAT原理与应用
- swi原理与应用
- 锁相环原理与应用
- 路由器原理与应用
- C++11多线程编程
- position属性介绍
- checkbox 和 text 文本框连接——学生管理系统之用户体验
- 你不知道的js【上卷】随看随记
- 函数式宏定义与普通函数的区别?C语言宏定义和宏定义函数 ?
- 虚函数原理与应用
- windows下Git使用系列(1)- Git和GitHub的了解及安装使用
- Homebrew的使用
- 基于zepto或jquery的手机端弹出框成功,失败,加载特效
- 正则表达式-记录
- 一个MFC小程序界面的实现思路(窗口分割)
- 以人为镜
- 转】M1卡密钥破解,收藏
- Spring自动扫描和管理Bean