so true

          心懷未來,開創未來!
          隨筆 - 160, 文章 - 0, 評論 - 40, 引用 - 0
          數據加載中……

          C++ implements final keyword

          #include <iostream>
          #include <string>
          #include <vector>
          #include <map>
          #include <set>
          using namespace std;
          //part 1
          class A {
          private:
              A() {};
          public:
              static A* GetInstance() {
                  return new A();
              }
          };
          //part 2
          class A {
              friend class B;
          private:
              A() {};
          };
          class B: public A {
          };
          //part 3
          class A {
              friend class B;
          private:
              A() {};
          };
          class B: virtual public A {
          };
          //part 4: 奇異遞歸模板模式(curiously recurring template pattern,CRTP)
          template <typename T>
          class A {
              friend T;
          private:
              A() {};
          };
          class B: virtual public A<B> {
          };
          //part 4.2:
          //這種技術獲得了類似于虛函數的效果,并避免了動態多態的代價。也有人把CRTP稱為“模擬的動態綁定”
          template <typename T>
          struct counter
          {
              static int objects_created;
              static int objects_alive;
              counter()
              {
                  ++objects_created;
                  ++objects_alive;
              }
              
              counter(const counter&)
              {
                  ++objects_created;
                  ++objects_alive;
              }
          protected:
              ~counter() // objects should never be removed through pointers of this type
              {
                  --objects_alive;
              }
          };
          template <typename T> int counter<T>::objects_created( 0 );
          template <typename T> int counter<T>::objects_alive( 0 );
          class X : counter<X>
          {
              ...
          };
              
          class Y : counter<Y>
          {
               ...
          };
          //part 5
          class A {
          protected:
              A() {};
          };
          class B: virtual A {
          };
          //part 6
          class B final {
          };
          //validate
          class C: public B {
          };
          int main(int argc, char* argv[]) {
              B b;
              C c;
              return 0;
          }

          posted on 2017-07-17 19:31 so true 閱讀(183) 評論(0)  編輯  收藏 所屬分類: C&C++

          主站蜘蛛池模板: 邵东县| 肃南| 东平县| 固始县| 资阳市| 临沭县| 报价| 青海省| 开封市| 若羌县| 南城县| 社会| 慈溪市| 阆中市| 洛南县| 金沙县| 务川| 定襄县| 教育| 玉门市| 察隅县| 海林市| 日照市| 衢州市| 金堂县| 浦县| 永城市| 九龙坡区| 嘉禾县| 聊城市| 南开区| 沾化县| 德令哈市| 沁阳市| 酉阳| 东安县| 裕民县| 邢台县| 广饶县| 偏关县| 上犹县|