C++虚函数和纯虚函数和抽象类

来源:互联网 发布:mac显示.git文件夹 编辑:程序博客网 时间:2024/05/14 23:26

1 虚函数

    虚函数是类的一种特殊成员函数,主要是为实现C++的多态特性引入。

    虚函数之所以“虚”是因为调用的虚函数不是在静态编译(静态编联)时确定,而是在运行时通过动态编联确定的。

    多态核心理念即是通过基类访问派生的子类,通常情况是借助基类指针来访问派生类对象。


    Note:

    1)析构函数通常声明为虚函数,这样在有继承场合,可以做到基于对象类型动态调用正确对象类型的析构函数,完成相应的对象析构。

    2)友元函数不是成员函数,只有成员函数才能是虚函数,所以友元函数不能是虚函数;但是友元函数可以通过调用成员虚函数达到虚拟化效果。

    3)通过虚函数可以实现多态灵活,但是虚函数也有缺点如占用更多内存(虚表),运行效率低(需要查找虚表找到正确函数)。

    4)通常普通函数(非成员函数)和类中不能继承(只属于本类)的函数(构造函数/static成员函数/inline成员函数/友元函数)不能声明为虚函数;不能声明为虚函数的函数共同点基本都是静态编联,而虚函数要靠动态编联机制才能起作用。


2 纯虚函数

    纯虚函数是一种特殊的虚函数,通常定义在基类中。纯虚函数在基类中定义方法是在函数声明末尾加“=0”,如 virtual func(int, int) = 0。

    纯虚函数的“纯”体现为基类不需要实现它,其主要作用是为派生类定义函数接口框架,由派生类完成纯虚函数的实现。

   

 3 抽象类   

    如果一个类包含有纯虚函数,则该类称为抽象类。

     抽象类一般只能是基类,其声明的纯虚函数由派生类实现。如果派生类没有重写(覆盖)抽象类的纯虚函数则派生类也是抽象类。

     对象不能基于抽象类创建,必须基于派生出来的具体类创建对象。


    

2 0
原创粉丝点击