zoukankan      html  css  js  c++  java
  • 关于wtl的一个实验

    代码如下:

    #include <iostream>
    
    using namespace std;
    
    template<typename T>
    class Base {
    public:
        void SayHi()
        {
            T* pT = static_cast<T*>(this);
            pT->PrintClassName();
        }
    
    protected:
        void PrintClassName()
        {
            cout << "This is class Base.
    ";
        }
    };
    
    class D1 : public Base<D1>
    {
    
    };
    
    class D2 : public Base<D2>
    {
    public:
        void PrintClassName()
        {
            cout << "This is class D2.
    ";
        }
    };
    
    int main(void)
    {
        D1 d1;
        D2 d2;
    
        d1.SayHi();
        d2.SayHi();
    
        getchar();
    
        return 0;
    }

    在类D1中,PrintClassName方法从父类Base中继承。

    PrintClassName在D1的权限是private ?

    那么在实例化Base的时候,Base类调用SayHi时,无法调用D1的private方法PrintClassName的,编译应该出错。

    实测中,g++和vc++编译通过,看来微软和开源届的实现是一致的。

    同样在D2中,如果PrintClassName声明为protected,则编译时,g++和vc++都无法通过,因为Base实例化时无法访问D2的protected方法。

    这样的代码设计思路在wtl中很常见,继续研究……

  • 相关阅读:
    消息队列介绍
    SpringBoot随笔-SpringBoot集成Druid
    Redis-Redis基本类型及使用Java操作
    信息安全
    计算机网络基础
    多媒体技术
    数据库基础
    程序设计基础
    计算机软件体系
    计算机硬件体系
  • 原文地址:https://www.cnblogs.com/jojodru/p/4329366.html
Copyright © 2011-2022 走看看