本问题困扰我几天了,希望哪位大牛可以为我解释下。最好有内存四区的模型图!谢谢了!!!!
例如下面代码
#include<iostream>
using namespace std;
class A
{
public:
void fun1()
{
cout << "i'm A.fun1" << endl;
}
virtual void fun2()
{
cout << "i'm A.fun2" << endl;
}
};
class B:public A
{
public:
void fun1()
{
cout << "i'm B.fun1" << endl;
}
virtual void fun2()
{
cout << "i'm B.fun2" << endl;
}
};
int main()
{
A a;
B *b = (B *)&a;
b->fun1();
b->fun2();
system("pause");
return 0;
}
}
输出结果是
i'm B.fun1
i'm A.fun2
请大神解答:
1.这个结果该怎么理解
2.这个 B *b = (B *)&a;的内存模型是什么样的
我从网上查到的结论是这样的:(不理解为什么会有这个this指针)
定义一个父类对象,将该父类对象的指针强制类型转换为子类指针,并赋给一个子类指针,则:该子类指针将指向该父类对象,但是其this指针仍然是指向子类的指针。
当该指针调用虚成员函数时,将按照对象的内存布局(指向虚函数表的指针存储在该对象的前四个字节)调用父类虚成员函数。
当该指针调用普通成员函数时,将通过this指针调用位于代码段的该子类的成员函数。