装配模式介绍

原理:
1、工具类就是一个配件,如果使用的类需要装配该工具类,就通过继承的方式继承填入了本类的工具类,实现虚函数的功能
2、工具类作为模板类,如果不传入使用类,无法实例化,因此必须传入使用类
3、工具类有一个函数,该函数使用static_cast将this指针指向的内存按照使用类的形式表达,要注意,不使用dynamic_cast是因为基类转派生类动态转化会返回空指针
4、使用类需要按照自己的需求,来判断要不要实现工具类要求实现的函数,如果实现了指定的函数,那么就能调用,没有实现就调用工具类提供的函数

装配模式优点:
1、直接用虚函数表需要大量空间存储虚函数表,速度慢,比如MFC中的类大量使用虚函数,使得MFC并不适合大型软件界面的开发
2、使用装配模式能节省很多虚函数表的空间
 

template<class T>
class Edoyun {
public:
    void show() {
        //本类强制转换为T*,用static_cast是因为基类转派生类用dynamic_cast会返回空指针
        T* p = static_cast<T*>(this);
        //如果类T实现了Name,那么调用类T的,如果没有调用本类的
        p->Name();
    }
protected:
    void Name() { std::cout << "Edoyun" << std::endl; }
};

class Sub :public Edoyun<Sub> {
public:
    void Name() { std::cout << "Sub" << std::endl; }
};
class Sub2 :public Edoyun<Sub2> {};

Sub sub;
Sub2 sub2;
sub.show();//Sub
sub2.show();//Edoyun

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值