CPP:05类的多态细节

CPP05-类的多态细节问题
//
// Created by 87572 on 20/7/10.
//

#include "../include/StateSeven.h"

/**
 * K1:------------类的多态-----------------
 *  1.使用virtual来修饰,会在虚函数表中生成一个虚函数.
 *    有virtual的类本身会隐藏一个虚指针,指向虚函数表,在方法运行的时候,动态执行绑定,也就是晚绑定.
 *  2.虚函数.
 *    Virtual关键字只能修饰成员函数.
 *    构造函数不能为虚函数
 *
 */

class SevenPerson {

    void test() {

    }
};

class SevenVirPerson {
public:
    SevenVirPerson(){
        cout<<"parent : init"<test();
}
void print3(SevenVirPerson &sevenVirPerson) {
    sevenVirPerson.test();
}

void useVirFun() {

    SevenVirPerson sevenVirPerson;
    SevenVirSon sevenVirSon;
    print1(sevenVirPerson);
    print1(sevenVirSon);//    对象不能直接多态,指针和引用才可以多态.
    print2(&sevenVirPerson);
    print2(&sevenVirSon);
    print3(sevenVirPerson);
    print3(sevenVirSon);

}


/**
 * K2:-------------abstract类-----------纯虚函数---------
 *   1.abstract类不能被实例化
 *   2.纯虚函数. 实例: virtual void test()=0;
 */

class PureVirPersonBase{
public:
    int  age=1;
    virtual void test()=0;
};

class PureVirPersonBaseSon:PureVirPersonBase{
public:
    int  age=2;

    void test() override =0;
};

class PureSon :public PureVirPersonBase,public PureVirPersonBaseSon{

    void test() override {

    }
};
void useVirPureFun(){
//    PureVirPerson person;abstract类不能被实例化
    PureSon pureSon;
//    cout<

你可能感兴趣的:(CPP:05类的多态细节)