c++多态 函数重写与隐藏 (多态 虚函数表和指针)

先上代码:

class Base {
public:
    Base(){    };
    virtual ~Base(){ };
    virtual void FunA(){
        qDebug()<<"Base  FunA";
    };
    void FunB(){
        qDebug()<<"Base  FunB";
    };
    void FunBase(){
        qDebug()<<"Base  FunBase";
    };
};
class Derived : public Base
{
public:
    Derived(){    };
    ~Derived(){    };
    void FunA(){
        qDebug()<<"Derived  FunA";
    };
    void FunB(){
        qDebug()<<"Derived  FunB";
    };
    void FunDerived(){
        qDebug()<<"Derived  FunDerived";
    };
};

int main(int argc, char *argv[])
{
     QApplication a(argc, argv);

    Base *obj = new Derived;//obj指向Base的指针
    obj->FunA();//指向子类重写虚函数   //输出 Derived  FunA
    obj->FunB();//指向父类FunB()      //输出 Base  FunB
     qDebug()<<"--------------";
    Derived* obj2 = new Derived;//obj2 指向Derived的指针
    obj2->FunA();//指向子类重写虚函数     //输出 Derived  FunA
    obj2->FunB();//指向子类FunB()        //输出 Derived  FunB

    return a.exec();
}

输出:

Derived  FunA
Base  FunB
--------------
Derived  FunA
Derived  FunB

是个人理解:

1. 定义基类obj 指针指向基类, 调用非虚函数FunB()会调用基类的FunB();

2. obj2 指向Derived的指针, 调用与父类同名函数时候,父类的同名函数会被隐藏(就近原则);

3.上面举例有多态 继承 虚函数 虚函数表 隐藏 覆盖(重写虚函数) 等知识, 包括重载这里我都不写了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值