继承、虚析构函数
虚继承,在继承时前面加virtual关键字,如class Bed:virtual public Furniture{};
虚继承是为了解决多继承出现菱形情况时,某一子类中同一属性出现多个,通过virtual关键字就可以直接最上层的父类中的该属性,且只有一个。如下图:
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include<cstdlib> using namespace std; class Hero { public: virtual int get_ad() {//virtual关键字是为了父类指向子类方法实现多态 return 10; } }; class AdvHero :public Hero { public: virtual int get_ad() {//此处可省略virtual return 1001; } }; class Monster { public: int get_ad() { return 1000; } }; void player_fight(Hero *hp, Monster *mp) { if (hp->get_ad() > mp->get_ad()) { cout << "英雄胜利,怪兽被打死" << endl; } else { cout << "英雄挂了,怪兽赢了" << endl; } } int main(void) { Hero h; Monster m; player_fight(&h, &m); AdvHero advH; player_fight(&advH, &m); system("pause"); return 0; }
虚析构函数,在多态过程中,调用析构函数把对象销毁时,需要注意析构函数也需要多态,需要在虚构函数前加virtual关键字。
因为子类在初始化时,先默认调用父类的无参构造函数,这样可能在创建子类对象时也创建了一个父类对象,所以在析构函数销毁子类对象时,也要实现析构函数的多态。