阅读背景:

C++学习总结(二十六)——RTTI类型检查,类指针类型转换

来源:互联网 
#include<iostream>
using namespace std;
//rtti实时类型检测
//成员变量的覆盖,静态变量也会覆盖。
//
class A
{
public:
	int num=0;
	static int data;
	virtual void run()//拥有虚函数,
	{
		cout << "Arun";
	}
};
int A::data = 0;
class B :public A
{
public:
	int num=0;
	static int data;
	void run()
	{
		cout << "Brun";
	}
	void test()
	{
		cout << "Btest";
	}
};
int B::data = 1;
void main1()
{
	B b1;
        b1.num = 10;
	b1.A::num = 20;
	cout << b1.num << ' ' << b1.A::num << endl;
	cout << b1.data << ' ' << b1.A::data<< endl;
	cin.get();
}
void main2()
{
	A *p1 = new A;
	A *p2 = new B;
	//不包含虚函数时,指针指向的对象都是A,包含虚函数时,指向B
	cout << typeid(*p1).name() << typeid(*p2).name() << endl;
	cout << typeid(p1).name() << typeid(p2).name() << endl;
	
	cin.get();
}
//dynamic进行数据类型转换
void main()
{
	A a1;
	B  b1;
	A *p1 = &a1;
	A *p2 = &b1;
	B *p3(nullptr);
	p3 = dynamic_cast<B*>(p2);
	 //dynamic类中必须包含虚函数,否则不能进行转换
	//根据虚函数表进行转换
	p3->test();
	cout << p3 << endl;
	p3 = dynamic_cast<B*>(p1);
	p3->test();
	cout << p3 << endl;

	std::cin.get();
}
//static进行数据类型转换
void main3()
{
	A a1;
	B  b1;
	A *p1 = &a1;
	A *p2 = &b1;
	B *p3(nullptr);
	p3 = static_cast<B*>(p2);//直接赋值地址,与有无虚函数无关
	p3->test();
	cout << p3 << endl;
	p3 = static_cast<B*>(p1);
	p3->test();
	cout << p3 << endl;

	std::cin.get();
}#include<iostream>
using namespace std;
//rtti实



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: