Code Bye

C++中虚函数本身还可以通过指针调用吗,怎么样调用?另外只有通过指针调用才能形成覆盖效果吗

如题,代码如下:
#include<iostream>
using namespace std;
class A
{
public :
    virtual void play();
};
class B : public A
{
public :
    void play();
};
void A :: play()
{
    cout << "AAA" << endl;
}
void B :: play()
{
    cout << "BBB" << endl;
}
main()
{
    A a;
    B b;
    a.play();           //不覆盖
    A *aa;
    aa=&b;
    aa -> play();             //覆盖
}

基类的虚函数可以通过代码中的a.play调用使其输出AAA,可以通过指针方式调用virtual吗?
当通过指针调用aa->play时形成覆盖效果输出BBB,那么是不是只有通过指针调用才能输出覆盖效果呢?

解决方案

10

指针方式调用才是按虚函数方式
a.play();只是调用A中的play

5

指针或引用才会触发C++的多态

5

《深度探索C++对象模型》
《C++反汇编与逆向分析技术揭秘》

5

多态要求指针或引用为载体。
虚函数覆盖效果是一直存在的,不过对象是静态绑订,所以看不到多态的效果。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++中虚函数本身还可以通过指针调用吗,怎么样调用?另外只有通过指针调用才能形成覆盖效果吗