子类重写父类的virtual和非virtual函数,用父类指针访问的情况

公有继承中,子类重写父类的非virtual 方法,当父类指针指向子类对象时,通过指针调用该成员函数,调用的是父类的方法。

class parent{
public:
    void outPut();
};

void parent::outPut(){
    cout << "parent output!" << endl;
}

class son : public parent{
public:
    void outPut();
};

void son::outPut(){
    cout << "son output!" << endl;
}

int main()
{
    parent p;
    p.outPut();
    son s;
    s.outPut();
    parent* ptr = new son();
    ptr->outPut();
    return 0;
}

运行结果吐下:

当父类的指针ptr 指向子类的对象,调用output函数时,调用的是父类的output函数。

而当子类重写父类的virtual函数时,即典型的多态用法:在父类的函数声明中,前面加上virtual

class parent{
public:
    virtual void outPut();
};

其他部分和上面相同,运行结果如下:

就会发现父类指针调用的是实际指向对象的output函数
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页