zoukankan      html  css  js  c++  java
  • Item 33. 抽象基类模仿秀(Manufacturing Abstract Bases)

    Item 33. Manufacturing Abstract Bases

    抽象基类描述了一个问题的抽象概念,它不能被实例化。
    class ABC {
      public:
        virtual ~ABC();
        virtual void anOperation() = 0; // pure
        //...
    };
    一个类中有了一个纯虚函数就成为了抽象类,编译器可以保证ABC不能实例化。

    有时候一个类没有候选的纯虚函数,但又想让它不能被实例化,如何办?

    1、构造函数和拷贝构造函数声明为保护成员
    class ABC {
      public:
        virtual ~ABC();
      protected:
        ABC();
        ABC( const ABC & );
        //...
    };
    class D : public ABC {
        //...
    };

    2、将析构函数声明为纯虚函数,并提供其实现
    class ABC {
      public:
        virtual ~ABC() = 0;
        //...
    };
    //...
    ABC::~ABC() { ... }

    3、当一个类根本就没有虚函数,也没需要显式声明构造函数时,就把非虚析构函数声明为保护的
    class ABC {
      protected:
        ~ABC();
      public:
        //...
    };

  • 相关阅读:
    ts笔记-辨析联合类型
    ts笔记-类型兼容性
    ts笔记-never和void
    ts笔记-泛型
    ts笔记-类型断言
    ts笔记
    ts笔记
    ts类型-枚举
    ts笔记-类型声明
    ts笔记-类型系统
  • 原文地址:https://www.cnblogs.com/aiwz/p/6333218.html
Copyright © 2011-2022 走看看