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

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等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值