示例代码
#include <iostream>
#include <algorithm>
using namespace std;
class A
{
public:
//A(int age) :m_age(age) {}
int m_age;
};
class B :public A
{
public:
//B(int age) :m_age(age) {};
int m_age;
};
int main()
{
A a; a.m_age = 0x45;
cout << "a对象的地址:" << & a << endl;
B b; b.m_age = 0x25;
cout << "b对象的地址:" << & b << endl;
a = (A)b;
cout << "强制类型转换后a.m_age的值:" << a.m_age << endl;
return 0;
}
执行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1pbnr1ME-1646187019245)(https://s2.loli.net/2022/03/02/R1r5T8Iax69YUpy.png)]
说明:
- 执行完
A a; a.m_age = 0x45;
后,a对象的内存内容为:
a |
---|
0x00000045 |
- 执行完
B b; b.m_age = 0x25;
后,b对象的内存内容为:
b |
---|
0xCCCCCCCC |
0x00000025 |
b对象将A类m_age继承下来,A对象中的m_age为内存初始化值,被隐藏起来了,可以使用b.A::m_age
进行访问
3. 执行完a = (A)b;
后,将b对象强制转换为a对象,此过程会将b的第一个值赋值给a对象的第一个值,此时在调用a.m_age
就会出现如代码所示情况。