zoukankan      html  css  js  c++  java
  • ATLStyle模板 不用虚函数实现多态

        以前看过ATL/WTL,发现它特有的实现方式不错,于是决定在项目当中使用上。通过《WTL开发指南》发现其中有严重的错误(痛恨这种极其不负责的指导方式,容易产生误导),这些特意做个笔记。其主旨在于:用类模板来实现多态,子类通过类模板将真实的类型传给父类,这样父类就知其真实的类型,并调用相关方法,同时又可以通过类的继承了解到应实现哪些"覆盖“的方法。

        其代码转载自:http://blog.csdn.net/nyzhl/archive/2009/07/28/4387675.aspx

     注:以下代码在AIX及Windows(VS2005)下测试通过。其中书中主要的严重错误在于:子类定义体中应声明父类模板实例为其友元类

    1 #include <stdio.h>
    2
    3 template<class T>
    4 class CBase
    5 {
    6 public:
    7 void Display()
    8 {
    9 T* pT = static_cast<T*>(this);
    10 pT->Print();
    11 }
    12 protected:
    13 void Print()
    14 {
    15 printf("This is CBase class\n");
    16 }
    17 };
    18
    19 class CBaseClass:public CBase<CBaseClass>
    20 {
    21 friend class CBase<CBaseClass>;
    22 };
    23
    24 class CDerivedClass:public CBase<CDerivedClass>
    25 {
    26 friend class CBase<CDerivedClass>;
    27 protected:
    28 void Print()
    29 {
    30 printf("This is CDerived class\n");
    31 }
    32 };
    33
    34 int main(int argc,char *argv[])
    35 {
    36 CBaseClass base;
    37 CDerivedClass derived;
    38 base.Display();
    39 derived.Display();
    40 return 0;
    41 }

  • 相关阅读:
    Trying to reload asset from disk that is not stored on disk
    学习,再学习!
    关于webQQ3.0
    java 之 枚举
    部队的日子
    大兵
    关于webQQ3
    Ubuntu下gedit的java编译设置
    晒晒
    chrome中行网银插件(Linux下可用,可以淘宝支付宝)
  • 原文地址:https://www.cnblogs.com/syru/p/2068395.html
Copyright © 2011-2022 走看看