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等
本文深入探讨了运行时类型识别(RTTI)在C++中的应用,着重阐述了多态的基础及其在指针转换过程中的作用。文章还详细介绍了C++中四种类型转换方式(dynamic, static, const, reinterpret),并以实例代码展示了如何实现对象成员的组合关系、私有继承、保护继承及多重继承。最后,文章概述了C++中用于代码重用的多种方法,包括模板类的定义与使用。
337

被折叠的 条评论
为什么被折叠?



