-
纯虚函数和抽象基类
-
纯虚函数: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; };
-
只要一个函数中定义了一个纯虚函数,它就是一个抽象基类,编译器禁止为这个类生成相应的对象
-
纯虚函数的纯虚特性也会被继承
-
-
一种技巧是:
提供一个接口类,这个类中实际使用的私有数据成员是一个基类指针或基类指针的句柄类,然后提供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 { ... };
chapter15_再探字符图形
最新推荐文章于 2020-12-22 16:32:24 发布