继承、虚析构函数

虚继承,在继承时前面加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关键字。

因为子类在初始化时,先默认调用父类的无参构造函数,这样可能在创建子类对象时也创建了一个父类对象,所以在析构函数销毁子类对象时,也要实现析构函数的多态。

posted @ 2018-12-05 22:38  zarjen  阅读(770)  评论(0编辑  收藏  举报