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 }

  • 相关阅读:
    自己的第一个网页
    第一次爬虫测试
    科学计算与可视化
    python自顶向下的设计方法进行体育竞技分析
    python PIL库的相关操作
    python 关于身份证号码的相关操作
    jieba库
    汉诺塔
    Django项目中运行Scrapy项目
    **Django+Echart实现多个饼状图(echart数据格式问题 {value: 135, name: '视频广告'})
  • 原文地址:https://www.cnblogs.com/syru/p/2068395.html
Copyright © 2011-2022 走看看