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

时间: 2024-08-03 17:36:04

关于wtl的一个实验的相关文章

【基础】一个实验搞定华为Hybrid-vlan的原理和配置

1.实验拓扑: 使用ENSP模拟器(版本V100R002C001.2.00.150) 2.   实验需求: 1)PC1和PC3属于VLAN10 2)PC2和PC4属于VLAN20 3)PC5和PC6属于VLAN30 4)VLAN10和20的成员都可以和VLAN30中 PC5通信,但是VLAN10和VLAN20的成 员之间不能通信(通过二层技术实现此需求,就是华为Hybrid-vlan技术的灵活之处) 3.  实验步骤: 1)  IP规划://这里均配置为192.168.1.0网段 PC1:192

一个实验轻松学习,华为单臂路由、DHCP、LACP模式链路捆绑、二层与三次链路混绑

实验拓扑 实验需求 1.C1与C3属于vlan10,C2与C4属于vlan20 2.SW1与SW2之间使用LACP模式链路捆绑,活动接口为2个 3.SW1与R1之间进行链路混绑 4.VLAN 10 与 VLAN 20 通过DHCP自动获取IP地址 5.在R1上配置单臂路由使全网互通 vlan10 IP:192.168.10.0/24 vlan20 IP:192.168.20.0/24 SW1配置: <SW1>system-view                //进入系统视图 [SW1]vl

一个实验搞定华为hybrid-vlan基本配置及原理

实验拓扑: 2.   实验需求:PC1和PC3属于VLAN10  PC2和PC4属于VLAN20  PC5和PC6属于VLAN30.VLAN10和20的成员都可以和VLAN30中PC5通信,但是VLAN10和VLAN20的成员之间不能通信(通过二层技术实现此需求,就是华为Hybrid-vlan技术的灵活之处) 3.  实验步骤:1)  IP规划://这里均配置为192.168.1.0网段PC1:192.168.1.10,PC2:192.168.1.20,PC3:192.168.1.30,PC4:

在ASP.NET下做了一个实验MVC的小东西

星期五下班前一时兴起,对MVC发表了一点看法.后来就想干脆弄个小东西来验证一些自己的想法帮组理清思路.所要源代码的免了,3个小时的急就章实在是乱得可以,既没有好的架构,也没有任何代码质量可言,主要是实现了对MVC的一点想法.所以拿出来大家给参考一下.申明:不是典型的MVC 在这里我参考了Web.Py的一些做法,首先我们将Url当作一种资源,一个典型的Url,如下: http://www.x.com/Index/view/2007/10/21 我们将从/Index/Topic/2007/10/21

关于Windows更新窗口内容的问题(作为一个实验,效果很明显)

Windows中的窗口在特定情况下会由系统进行重绘,如无效区域重新显现时,,会向窗口的处理过程发送VM_PAINT消息,但是,可能还有Windows自己的更新窗口处理,如在下面的代码中,将击键显式地转换为VM_PAINT消息,让窗口过程处理,但是运行的结果却是,击键后窗口没有马上重绘(显示字体没有改变),而是在下次重绘时才改变字体,但是如果改变为一个UpdateWindow()函数时,就会马上改变字体.猜想UpdateWindow(),InvaliddateRect()和Windows系统调用都

尾递归一个实验

我刚在.Net下做了测试,对于尾递归,在Debug模式下,不会被优化为非递归结构,在Release模式下,会被优化为非递归结构,就不存在栈溢出的问题了 STST? 这是我模拟的文件结构类 STST ? 这是非尾递归版本 STST 这是尾递归版本 STST 这是测试代码 STST 这是CreateDir的定义 STST 结果: 1,在Debug模式下,无论是不适尾递归,都会溢出 2,在Release模式下,非尾递归版本会溢出,而尾递归版本不会溢出 STST 现代编译器我认为都会有的 STST 因为

java一个实验

第一步: applicationContext-main.xml下,删除代码 <!-- 货物类型  -->    <bean id="cargoTypeDao" class="wazert.cargo.services.impl.CargoTypeDaoImpl">        <property name="dataSource">            <ref bean="dataSou

【中英对照】【EntLib6】【Unity】实验1:使用一个Unity容器

Lab 1: Using a Unity Container 实验1:使用一个Unity容器 Estimated time to complete this lab: 15 minutes 估计完成时间:15分钟 Introduction 介绍 In this lab, you will practice using a Unity container to create application objects and wire them together. You will update a

48_类加载器的一个高级问题的实验分析

  这是一个实验,源代码 链接:http://pan.baidu.com/s/1c0ix9UK 密码:ssvd 1.让tomcat加载MyServlet http://localhost:8080/itcastweb/servlet/MyServlet   2.让jvm加载MyServlet 导出MyServlet.class到 D:\Program Files\Java\jdk1.8.0\jre\lib\ext\itcast_web.jar, 则java虚拟机的ExtClassLoader加载