C++ 多态 (virtual)
#include <iostream>
using namespace std;
class A{
public:
A():i(10){}
virtual void f() {cout<< "A::f()" << i <<endl;}
int i;
};
class B:public A{
public:
B(): j(11){}
virtual void f() {cout<< "B::f()" << j <<endl;}
int j;
};
int fun(A* p)
{
cout << p->i << endl;
p->f();
}
int main (int argc, char *argv[])
{
A a;
B b;
A *p = &a;
int *r = (int *)&a; //a 的 虚表 的地址
int *t = (int *)&b; //b 的 虚表 的地址
*r = *t; //将 b 虚表的地址, 赋值给a
p->f(); // p指针调用 b 虚表的 f() 函数
a = b; //直接赋值,virtual不生效
a.f();
cin.get();
}
本文通过一个具体的C++代码示例介绍了多态性的实现原理,特别是虚函数表的作用及其如何支持运行时多态。示例展示了如何通过基类指针调用派生类的成员函数,并探讨了虚函数表地址更改对程序行为的影响。
1128

被折叠的 条评论
为什么被折叠?



