码迷,mamicode.com
首页 > 其他好文 > 详细

关于wtl的一个实验

时间:2015-03-11 12:38:20      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

代码如下:

#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.\n";
    }
};

class D1 : public Base<D1>
{

};

class D2 : public Base<D2>
{
public:
    void PrintClassName()
    {
        cout << "This is class D2.\n";
    }
};

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中很常见,继续研究……

关于wtl的一个实验

标签:

原文地址:http://www.cnblogs.com/jojodru/p/4329366.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!