C++ Primier学习笔记2-虚函数
来源:互联网 发布:淘宝买的东西下架了 编辑:程序博客网 时间:2024/06/07 05:09
虚函数
多态(继承关系的多个类型)通过虚函数实现。
关键字virtual告诉编译器不应当完成早绑定,而是自动实现晚绑定/运行时绑定所必须的所有机制。动态绑定只有当通过指针或者引用调用虚函数时才会发生。编译器为每个包含虚函数的类创建一个表,放置特定类的虚函数地址,秘密设置一个指针,指向上述表。做多态调用时,编译器静态获取vptr,并在表中查找函数地址的代码,这样就能调用正确的函数使晚绑定发生。
补充:析构函数可以是虚函数,所有的派生类的析构函数都将自动变为virtual型,不会出现由于析构函数未被调用而导致的内存泄漏(虚函数采用虚调用的办法,可以在只有部分消息的情况下工作,适合知道接口不知道准确类型的函数);但构造函数不可以是虚函数,创建对象,势必要知道对象的准确类型。构造函数可以重载,析构函数不能重载(构造函数根据参数不同实现重载,析构函数没有参数)。
根据下面具体的题目分析:
struct A{ void foo(){printf("foo");} virtual void bar(){printf("bar");} A(){bar();}};struct B:A{ void foo(){printf("b_foo");} void bar(){printf("b_bar");}};A *p=new B;p->foo();p->bar();输出为:
A *p=newB;// A类指针指向一个实例化对象B, B类继承A类,先调用父类的无参构造函数,bar()输出bar,B类没有自己显示定义的构造函数。
p->foo();//执行B类里的foo()函数,因为foo不是虚函数,所以直接调用父类的foo函数,输出foo
p->bar();//执行B类的bar()函数, 该函数为虚函数,调用子类的实现,输出b_bar
输出:barfoob_bar
0 0
- C++ Primier学习笔记2-虚函数
- C++Primier笔记第一部分 基础
- C++primier总结
- C++:函数<学习笔记>
- C++ Primier读后感 之 第七章 函数
- 学习笔记3-C++-虚函数
- C语言的学习笔记2-函数
- C学习笔记之函数
- C/C学习笔记/函数与程序结构
- C Primier Plus 第十三章 文件输入/输出
- 多态性与虚函数——C/C++学习笔记
- c语言学习笔记18之函数2
- c++Primer学习笔记(7)--函数
- C++Template学习笔记之函数模板
- C++pirmer 学习笔记之函数定义
- C语言学习笔记(九)--函数
- 《C和指针》学习笔记四/函数/
- IOS学习笔记06---C语言函数
- POJ 2828-Buy Tickets(线段树单点更新-插队)
- PHPMailer发送邮件失败:SMTP connect failed
- 利用opencv3读取tensorflow model,对图像进行分类
- 详解 QT 父子与 QT 对象delete
- 【设计模式】新手入门笔记
- C++ Primier学习笔记2-虚函数
- 记录下我的第一篇博客
- 抓取手机数据网络的网络包(一)——安装adb,并pc连接手机
- css js实现3D魔方转动
- 543. Diameter of Binary Tree | 二叉树的“直径”
- C++类成员初始化列表
- 将tensorflow训练的model,转换为.pb格式的model
- Eclipse项目迁移为Android Studio项目步骤及注意事项
- centos7安装redis3.2.8