Shape.h
#ifndef SHAPE_H
#define SHAPE_H
class CShape
{
private:
int color_;
virtual void Draw();
};
class CRecttangle: public CShape
{
private:
int height_;
int width_;
void Draw();
};
#endif
Shape.cpp
#include "StdAfx.h"
#include "Shape.h"
void CShape::Draw()
{
color_ = 0;
}
void CRecttangle::Draw()
{
height_ = 0;
width_ = 0;
}
RTTI.cpp
// RTTI.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "Shape.h"
#include <iostream>
#include <typeinfo>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
CRecttangle recttangle;
CShape *pShape = &recttangle;
CShape &rShape = recttangle;
cout << typeid(CShape).name() << endl;
cout << typeid(float).name() << endl;
cout << typeid(5).name() << endl;
cout << typeid(pShape).name() << endl;
cout << typeid(rShape).name()<< endl;
cout << typeid(*pShape).name() << endl;
cout << typeid(*pShape).raw_name() << endl;
system("pause");
return 0;
}
运行结果:
class CShape
float
int
class CShape *
class CRecttangle
class CRecttangle
.?AVCRecttangle@@
请按任意键继续. . .
总结:
定义类时,类要有虚函数
编译设置/GR,C++-->语言-->启用运行类型信息
VC默认该值没有选,此情况下projec可以使用
GR去掉,程序运行时崩溃