面试题 C++ 动态绑定 虚函数

#include <iostream>

using namespace std;

class A
{
    public:

    A ():m_iVal(0){
        test();
    }   

    virtual void func() {
        std::cout<<m_iVal<<"";
    }   

    void test(){
        func();
    }   

    public:

    int m_iVal;
};

class B : public A
{
    public:
    B(){
        test();
    };  

    virtual void func()
    {   
        ++m_iVal;
        std::cout<<m_iVal<<"";
    }   
};

int main(int argc ,char* argv[])
{
    A*p = new B;
    p->test();
    return 0;
}


// 用A 基类的指针 去 引用一个 子类 ,就可能会发生 动态绑定
// 初始化B的时候,因为B是从A继承来的,所以要先初始化一个A
// A的构造函数,调用的 test(), 打印出0
//
// 进行B的构造函数,调用test(), test()中又会去调用func ,这是func发生动态绑定,
// 调用B的func, ++m_iVal之后, 打印出1
//
// 然后运行到 p->test()
// 又调用到子类的 test(), 再调用func(), 又发生动态绑定 ++m_iVal, 之后,又打印出 2
//
// 所以结果是
//
// 012
//
//
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值