RTTI(运行阶段类型识别,RunTime Type Identification)
多态的基础!
运行的时候根据具体对象的类型再决定做什么事情
引出指针转换的问题。例如class 爷爷,class 爸爸,class 儿子
儿子类型的指针可以dynamic_cast后赋值给爸爸类型、爷爷类型的指针,因为儿子类继承于爸爸和爷爷
但反过来,爷爷类指针dynamic_cast成爸爸类,要赋值给爸爸型指针,则会失败。dynamic_cast<const PAPA>*grand的结果是空指针。
四种C++类型转换:(dynamic,static,const,reinterpret)
dynamic显式向上转换,如果向下转换,指针为空
static隐式转化,向下转换不会失败,但有潜在问题
const唯一可以去除const关键字的转换
reinterpret天生危险的转换,如:把double转换为两个short组成的struct
以下是C++用到的代码重用的方法
1、包含对象成员的类
例如class A
{
string name;
valarray<double> scores;
}
string和valarray就是A以外的其他类。A包含了其他类(组合关系)
2、私有继承和保护继承
class A:private std::string ,private std::valarray<double>
{
...
}
以上为私有继承。保护继承,则使用的是protected
3、多重继承(MI)
个人不建议使用
4、定义模板类以及如何使用。把下面语句放在头文件,比如stack1.h中
template<typename Type>
class ShiFan
{
T element;
T func()
{return this.element;}
}
然后,stack1.cpp引用该头文件
ShiFan<int> s;
使用方法类似于使用vector、stack等