025RTTI和dynamic_cast类型转换
#include<iostream>
#include<cstdlib>
#include<string>
using namespace std;
class Human
{
public:
int age;
string name;
public:
Human();
Human(int age, string name);
~Human()
{
cout << "Human析构函数" << endl;
}
virtual void eat()
{
cout << "Human eat()函数" << endl;
}
};
class Man :public Human
{
public:
Man();
~Man()
{
cout << "man的析构函数执行" << endl;
}
virtual void eat()
{
cout << "Man eat()函数" << endl;
}
public:
};
class Woman :public Human
{
public:
Woman();
public:
~Woman()
{
cout << "Woman析构函数执行" << endl;
}
virtual void eat()
{
cout << "woman eat()函数" << endl;
}
};
Woman::Woman()
{
cout << "这是woman的构造函数" << endl;
}
Human::Human()
{
cout << "Human默认构造函数" << endl;
}
Human::Human(int age, string name)
{
this->age = age;
this->name = name;
}
Man::Man()
{
cout << "Man类的默认构造函数" << endl;
}
int main(void)
{
Human *p_human = new Man;
Human&q = *p_human;
q.age = 12;
q.name = "jisuanji";
q.eat();
Man *m1 = (Man*)(p_human);
m1->eat();
Woman *w1 = (Woman*)p_human;
Man*m2 = dynamic_cast<Man*>(p_human);
m2->eat();
Human&m_reference = *p_human;
try
{
Man m3 = dynamic_cast<Man&>(m_reference);
cout << typeid(m_reference).name() << endl;
cout << typeid(m3).name() << endl;
}
catch (std::bad_cast)
{
cout << "std::bad_cast" << endl;
}
Human h1 = Human(12, "jisuanjiii");
cout << typeid(h1).name() << endl;
int a = 10;
cout << typeid(a).name() << endl;
cout << typeid("jisuanjizuchengyuanli").name() << endl;
Human*p_human02 = new Woman;
if (typeid(p_human)==typeid(p_human02))
{
cout << "p_human和p_human02是同一种指针类型" << endl;
/*比较的时候是比较的定义的类型,而不是new后面出的类型,这也可以验证前面的RTTI类型识别
*/
}
Woman*p_woman = new Woman;
Human*p_human03 = p_woman;
if (typeid(*p_human)==typeid(*p_human03))
{
cout << "p_human和p_human03对象类型相同" << endl;
}
int aa = 11;
const type_info&aa_reference = typeid(aa);
cout << aa_reference.name() << endl;
system("pause");
return 0;
}