【C++】继承和多态――虚函数和纯虚函数

匿名 (未验证) 提交于 2019-12-02 23:32:01

一、虚函数

虚函数定义:

虚函数指针的优先级最高

虚基类的作用:

虚基类并不是在声明基类时声明的,而是在声明派生类时,指定继承方式时声明的。

声明虚基类的一般形式:

class 派生类名:virtual 继承方式 基类名

成为虚函数的条件:

虚函数表(编译期间)(一个类)

1、那些函数可以成为虚函数,哪些不能?

(不能,因为没有依赖对象调用)

(不能,没有依赖对象调用)

(不能,因为不能取地址)

3、基类和派生类中的析构函数满足同名覆盖的关系

4、基类指针指向派生类对象(派生类对象中的起始部分)的时候,基类中的析构函数设为虚函数?

避免资源泄漏

5、对象的虚函数指针什么时候指向虚表的?

二、纯虚函数

声明纯虚基类的一般形式:

virtual 函数类型 函数名 (参数表列) = 0;

拥有纯虚函数的类为抽象类(抽象类不能生成对象),通过引用或者指针来实现

 class Person {    virtual void display()       //虚函数    {          cout<<   <<endl;     }    virtual void Display () = 0; // 纯虚函数 protected :    string _name ; // 姓名 }; class Student : public Person {};

(1)纯虚函数没有函数体;
(2)最后面的“=0”并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是虚函数”;
(3)这是一个声明语句,最后有分号。
纯虚函数只有函数的名字而不具备函数的功能,不能被调用。
纯虚函数的作用是在基类中为其派生类保留一个函数的名字,以便派生类根据需要对他进行定义。如果在基类中没有保留函数名字,则无法实现多态性。
如果在一个类中声明了纯虚函数,在其派生类中没有对其函数进行定义,则该虚函数在派生类中仍然为纯虚函数。

文章来源: https://blog.csdn.net/like_that/article/details/89739004
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!