如题,代码如下:
#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
a.play();只是调用A中的play
5
指针或引用才会触发C++的多态
5
《深度探索C++对象模型》
《C++反汇编与逆向分析技术揭秘》
《C++反汇编与逆向分析技术揭秘》
5
多态要求指针或引用为载体。
虚函数覆盖效果是一直存在的,不过对象是静态绑订,所以看不到多态的效果。
虚函数覆盖效果是一直存在的,不过对象是静态绑订,所以看不到多态的效果。