【今日学习】C++ Primer Plus 第六版——RTTI、代码重用(上)

来源:互联网 发布:移动4g网络套餐 编辑:程序博客网 时间:2024/06/05 10:07
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等
0 0