1.练习代码

#include "stdafx.h"
#include <iostream>
#include <stdio.h>
using namespace std;

class A
{
public:
	A() {m_a = 1; m_b =2;}
	~A() {};
	void fun(){printf("%d%d", m_a, m_b);}
private:
	int m_a;
	int m_b;
};
class B
{
public:
	B(){m_c = 3;}
	~B();
	void fun(){printf("%d", m_c);}
private:
	int m_c;
};

int _tmain(int argc, _TCHAR* argv[])
{
	A a;
	B *pb = (B*)(&a);
	pb->fun();
	return 0;
}

2.关键点分析

2.1转换过程

#include "stdafx.h"
#include <iostream>
#include <stdio.h>
using namespace std;

class A
{
public:
	A() {m_a = 1; m_b =2;}
	~A() {};
	void fun(){printf("%d%d", m_a, m_b);}
private:
	int m_a;
	int m_b;
};
class B
{
public:
	B(){m_c = 3;}
	~B();
	void fun(){printf("%d", m_c);}
private:
	int m_c;
};

int _tmain(int argc, _TCHAR* argv[])
{
	A a;
	B *pb = (B*)(&a); //强制类型转换,将原本指向A类结构的a指针,赋予指向B类结构的pb指针
	pb->fun(); //调用B::fun()方法,寻找私有变量中的“m_c”,实际找到的是“m_a”,将值1打印出来
	return 0;
}

2.2运行结果

【小练习】指针与引用:传递动态内存4

相关文章: