C++虚函数相关总结(入门)

C++的虚函数牵涉到了其C++的特性:多态性

一 . 在这里回顾C++语言的三大特性:封装、继承和多态。
封装可以隐藏实现细节,使得代码模块化,继承可以拓展已存在的模块。
目的都是为了代码重用,而多态是为了接口重用。多态是通过虚函数实现的

a.封装
把过程和数据封装起来,决定哪些特性是可见的,哪些特性是隐藏的,保证了模块独立性,信息保密性、提高了程序重用性和可维护性。

b.继承
指一个对象从另外一个对象获得功能的过程,子类可以通过继承得到与类相同的属性,可以提高代码的重用性,同时也让类之间产生关系,作为多态特性的基础。

c.多态
多态简单说,就是某一类事物多种存在形态,在类与类之间存在关系的前提下,大大提高程序的扩展性。

二. 虚函数
虚函数必须是基类的非静态成员函数,也就是在基类的成员函数前面加上关键字virtual,用法举个例子
class father
{
public:
virtual void run()
const{cout <<”父亲可以跑一万米\n”};

}
函数声明前面加了virtual关键字,表示该函数是有多种形态的,该函数可以被多个对象所拥有,且功能不一。

三.关于虚函数,需要注意的几个点:
1.静态联编与动态联编
在C++中,联编是指计算机各部分程序通过编译、连接,形成一个可执行程序的过程,联编分为静态联编和动态联编。

静态联编是指联编工作是在程序编译连接阶段进行的,静态联编又称早期联编,因为这种联编是在程序开始运行之前完成的。
特点:
调用速度快,效率高

动态联编是指编译程序在编译阶段并不能确切地知道将要调用的函数,只有在程序执行时才能确定将要调用的函数,为此要确切地知道将要调用的函数,要求联编工作在程序运行时进行,这种在程序运行时进行的联编工作被称为动态联编。C++规定:动态联编是在虚函数的支持下实现的。
特点:
灵活,问题抽象性和问题的易维护性。

2.构造函数、析构函数与虚函数的关系

a.虚函数不可能是构造函数,任何构造函数之外的非静态函数都可以是虚函数,虚函数的是由指针来调用的,必须先由编译器实例化后才能使用虚函数。

b.析构函数可以是虚函数,但是在基类里通常都要定义一个虚析构函数,如果不这样做,在new生成派生类的对象后,在delete的时候只会调用基类的析构函数,而不会调用派生类的析构函数。这样,在派生类中申请的资源就不会得到释放,就会造成内存泄漏,这是相当危险的:如果系统中有大量的派生类对象被这样创建和销毁,就会有内存不断的泄漏,久而久之,系统就会因为缺少内存而崩溃。

猜你喜欢

转载自blog.csdn.net/alexhu2010q/article/details/80193275