实例代码
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Human{
public:
Human(){
std::cout << " 执行了Human::Human() " << std::endl;
}
Human(int abc){
std::cout << " 执行了Human::Human(int) " << std::endl;
}
virtual ~Human(){
}
void funcpub(){
std::cout << " 执行了Human::funcpub() " << std::endl;
}
void somenamefunc(){
std::cout << " 执行了Human::somenamefunc() " << std::endl;
}
void funchuman(){
std::cout << " 执行了Human::funchuman() " << std::endl;
}
virtual void eat(){
std::cout << " 人类吃各种粮食 " << std::endl;
}
public:
int m_age;
char m_name[100];
};
class Men : public Human{
public:
Men(){
std::cout << " 执行了Men::Men() " << std::endl;
}
Men(int abc){
std::cout << " 执行了Men::Men(int) " << std::endl;
}
void somenamefunc(){
Human::somenamefunc();
std::cout << " 执行了Men::somenamefunc() " << std::endl;
}
virtual void eat(){
std::cout << " 男人喜欢吃米饭 " << std::endl;
}
void testfunc(){
std::cout << " testfunc " << std::endl;
}
friend void func(const Men& tempmen);
private:
void funcmen()const {
std::cout << " 执行了Men::funcmen() " << std::endl;
}
public:
using Human::somenamefunc;
};
class WoMen : public Human{
public:
WoMen(){
std::cout << " 执行了WoMen::WoMen() " << std::endl;
}
WoMen(int abc){
std::cout << " 执行了WoMen::WoMen(int) " << std::endl;
}
void somenamefunc(){
Human::somenamefunc();
std::cout << " 执行了WoMen::somenamefunc() " << std::endl;
}
void funcmen(){
std::cout << " 执行了WoMen::funcmen() " << std::endl;
}
virtual void eat(){
std::cout << " 女人喜欢吃面食 " << std::endl;
}
public:
using Human::somenamefunc;
};
void func(const Men & tmpmen){
tmpmen.funcmen();
}
int main() {
Human *phuman = new Men;
Human &q = *phuman;
Men*p = (Men*)phuman;
p->testfunc();
Men* pmen = dynamic_cast<Men*>(phuman);
if (pmen != nullptr) {
cout << "phuman 实际是一个Men类型 " << endl;
pmen->testfunc();
}
else{
cout << "phuman 不是一个Men类型" << endl;
}
Human &q1 = *phuman;
try{
Men &menbm = dynamic_cast<Men&>(q1);
cout << "phuman 实际上是一个Men类型" << endl;
menbm.testfunc();
}
catch (std::bad_cast)
{
cout << "phuman实际不是一个Men类型" << endl;
}
Human &q2 = *phuman;
cout << typeid(*phuman).name() << endl;
cout << typeid(q2).name() << endl;
char a[10] = { 5, 1 };
int b = 120;
Human *phuman11 = new Men;
Human *phuman22 = new WoMen;
if (typeid(phuman11) == typeid(phuman22)) {
cout << "phuman11 和 phuman22 是同一种类型【看指针定义】" << endl;
}
Human *phuman33 = new Men;
Men* pmen33 = new Men;
Human *phuman44 = pmen33;
if (typeid(*phuman33) == typeid(*pmen33))
{
cout << "phuman33 和 pmen33指向的对象类型相同" << endl;
}
if (typeid(*pmen33) == typeid(*phuman44))
{
cout << "pmen33 和 phuman44 指向的对象类型相同" << endl;
}
Human *phuman55 = new Men;
if (typeid(*phuman55) == typeid(Men))
{
cout << "phuman55 指向 Men" << endl;
}
else if (typeid(*phuman55) == typeid(Human))
{
cout << "phuman55 指向 Human" << endl;
}
Human *phuman66 = new Men;
const type_info &tp = typeid(*phuman66);
cout << tp.name() << endl;
Human *phuman77 = new Men;
const type_info &tp2 = typeid(*phuman77);
if (tp == tp2)
{
cout << "tp 和 tp2 类型相同" << endl;
}
Human *phuman88 = new WoMen;
const type_info &tp3 = typeid(*phuman88);
if (tp == tp3)
{
cout << "tp 和 tp3 类型相同" << endl;
}
Human *phuman99 = new Men;
const type_info &tp4 = typeid(*phuman99);
system("pause");
return 0;
}