博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
004 虚函数
阅读量:7060 次
发布时间:2019-06-28

本文共 1496 字,大约阅读时间需要 4 分钟。

1.虚函数的关键字virtual只能用在声明的地方,实现的地方不用加

class Base{public: virtual void show(); }; void Base::show(){ cout << "Base show" << endl; }

2.父类的虚函数,子类继承后,在子类中也是虚函数

class Base的虚函数show,在被class D继承后,在class D中也是虚函数,所以执行结果才是调用了class C的show方法。在class D中声明show的时候,为了增加可读性,也可以加上virtual,和不加的效果是一样的。

#include 
using namespace std; class Base{ public: virtual void show();//{ // cout << "Base show" << endl; //} }; void Base::show(){ cout << "Base show" << endl; } class D : public Base{ public: void show(){ //这里可以加上virtual cout << "D show" << endl; } }; class C : public D{ public: void show(){ cout << "C show" << endl; } }; int main(){ C d; Base *pb; pb = &d; pb->show();//打印出来的是:C show }

3.虚函数只能是类的成员函数,它就是为了实现多态而生的。不能是全局函数。

4.静态(static)函数不可以是虚函数

5.内联函数不可以是虚函数(虚函数在运行期才能确定,内联函数要在编译器确定)

6.父类的析构函数必须是虚函数。(不然不能释放子类的内存)

动态创建父类的时候,当delete父类对象的时候,不会自动释放子类对象,造成内存泄漏;

不是动态创建父类的时候,当delete父类对象的时候,会自动释放子类对象,不会造成内存泄漏;

#include 
using namespace std; class Base{ public: Base(){ cout << "create Base" << endl; } virtual ~Base(){ //不加virtual的话,动态创建父类对象后,delete父类对象时,不能释放子类对象 cout << "free Base" << endl; } virtual Base* show(){ cout << "Base show" << endl; return this; } }; class D : public Base{ public: D(){ cout << "create D" << endl; } ~D(){ cout << "free D" << endl; } D* show(){ cout << "D show" << endl; return this; } }; int main(){ D d; Base* pb = &d; pb->show(); Base* p = new D; delete p;//Base类的析构函数不用virtual的话,只能释放父类对象的内存空间,不能释放子类对象的内存空间。 }

转载于:https://www.cnblogs.com/guojun/p/9719656.html

你可能感兴趣的文章
路由器命令行翻译工具
查看>>
我的友情链接
查看>>
Linux下重启网络服务
查看>>
随笔-I/O流
查看>>
Cent OS下修改用户打开文件数限制
查看>>
我的友情链接
查看>>
java第六次作业
查看>>
Windows Server 2012 R2 DirectAccess功能测试(3)—App2服务器安装及配置
查看>>
VirtualBox修改CentOS系统的MAC地址
查看>>
Centos 6.7 安张nagios和cacti 并添加监控主机
查看>>
css reset
查看>>
pancake的排序- 1.3 一摞烙饼的排序 《编程之美》读书笔记03
查看>>
批量恢复zencart产品表所属分类master_categories_id为0的产品
查看>>
初识汇编(二)
查看>>
hihoCoder1044 (状态压缩DP)
查看>>
hdu2067 卡特兰数
查看>>
回档|忠诚2|zkw线段树
查看>>
P2456 - 膜拜神犇
查看>>
杭电1513--Palindrome(滚动数组+LCS)
查看>>
杭电1465--不容易系列之一
查看>>