为什么需要虚析构函数? 什么是多态?

纯虚函数:形式为virtual void fun1() = 0;
纯虚函数不需要实现,原因是不会被调用到

C++中基类采用virtual虚析构函数是为了防止内存泄漏

只有当一个类被用来作为基类的时候,才会把析构函数写成虚函数。

具体地说,如果派生类中申请了内存空间,并在其析构函数中对这些内存空间进行释放。假设基类中采用的是非虚析构函数,当删除基类指针指向的派生类对象时就不会触发动态绑定,因而只会调用基类的析构函数,而不会调用派生类的析构函数。
那么在这种情况下,派生类中申请的空间就得不到释放从而产生内存泄漏。所以,为了防止这种情况的发生,C++中基类的析构函数应采用virtual虚析构函数。

C++多态性

主要是通过虚函数实现的,虚函数允许子类重写override
(注意和overload的区别,overload是重载,是允许同名函数的表现,这些函数参数列表/类型不同)

  • 多态与非多态的实质区别就是函数地址是早绑定还是晚绑定。

  • 如果函数的调用,在编译器编译期间就可以确定函数的调用地址,并生产代码,是静态的,就是说地址是早绑定的。

  • 而如果函数调用的地址不能在编译器期间确定,需要在运行时才确定,这就属于晚绑定。

目的:接口重用。封装可以使得代码模块化,继承可以扩展已存在的代码,他们的目的都是为了代码重用。而多态的目的则是为了接口重用。

用法:声明基类的指针,利用该指针指向任意一个子类对象,调用相应的虚函数,可以根据指向的子类的不同而实现不同的方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。