C++虚函数

类的多态


访问控制

    类的成员包括三种:public,protected,private。对于一个基类来说,public成员类内可以访问,类的对象也可以直接访问;protected成员类内可以访问,类的对象不可以访问,但是其派生类(子类)内可以访问;而private成员只能在自己类内访问。也就是子类公有继承可以获得父类非private成员的全部属性,私有继承基类的公有成员和保护成员都作为派生类的私有成员

虚函数

    虚函数的作用主要是为了实现多态机制。如果一个基类指针指向一个派生类对象,该指针只能访问基类成员(静态联编)。而虚函数可以实现基类的指针调用派生类成员函数。

    虚函数是通过一张虚函数表实现的。c++编译器保证虚函数表的指针存在于对象实例最前面的位置

    虚函数可以在基类中实现,子类重写父类中有相同名称和参数的虚函数;纯虚函数不能在基类中实现,只能在派生类中实现

    子类重新定义父类有相同名称的非虚函数(参数列表可以不同)

    派生类对象构造、析构函数调用顺序基类构造-派生类构造-派生类析构-基类析构

    如果基类析构不为虚,当delete指向派生对象的基类指针时则只会调用基类的析构函数,不会调用派生类的析构函数,造成内存泄漏

代码
运行结果1

        而将基类析构声明为虚析构时,派生类的内存就会被释放了

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