chapter15_再探字符图形

  1. 纯虚函数和抽象基类

    1. 纯虚函数:virtual修饰的函数的函数体 = 0

       class Pic_base {
       private:
           typedef std::vector<std::string>::size_type ht_sz;
           typedef std::string::size_type wd_sz;
      
           [[nodiscard]] virtual wd_sz width() const = 0;
           [[nodiscard]] virtual ht_sz height() const = 0;
      
           virtual void display(std::ostream&, ht_sz, bool) const = 0;
       };
      
    2. 只要一个函数中定义了一个纯虚函数,它就是一个抽象基类,编译器禁止为这个类生成相应的对象

    3. 纯虚函数的纯虚特性也会被继承

  2. 一种技巧是:

    提供一个接口类,这个类中实际使用的私有数据成员是一个基类指针或基类指针的句柄类,然后提供public方法;

    内部的基类的所有数据成员和方法都用private修饰,只添加接口类作为友元类

     // 接口类
     class Picture {
     public:
         explicit Picture(const std::vector<std::string>& = std::vector<std::string>());
     private:
         Ref_handle<Pic_base> p;   // 内部成员
     };
    
     // 基类,内部方法用纯虚函数
     class Pic_base {
     private:
         typedef std::vector<std::string>::size_type ht_sz;
         typedef std::string::size_type wd_sz;
    
         [[nodiscard]] virtual wd_sz width() const = 0;
         [[nodiscard]] virtual ht_sz height() const = 0;
    
         virtual void display(std::ostream&, ht_sz, bool) const = 0;
     };
    
     // 几个派生类
     class String_Pic: public Pic_base {
         ...
     };
     class Frame_Pic: public Pic_base {
         ...
     };
     class Vcat_Pic: public Pic_base {
         ...
     };
     class Hcat_Pic: public Pic_base {
         ...
     };
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值