关闭

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

标签: C++虚函数纯虚函数抽象类
239人阅读 评论(0) 收藏 举报
分类:

1 虚函数

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

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

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


    Note:

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

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

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

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


2 纯虚函数

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

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

   

 3 抽象类   

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

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

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


    

2
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:183723次
    • 积分:3119
    • 等级:
    • 排名:第11113名
    • 原创:80篇
    • 转载:146篇
    • 译文:24篇
    • 评论:30条
    最新评论