Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2461351
  • 博文数量: 392
  • 博客积分: 7040
  • 博客等级: 少将
  • 技术积分: 4138
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-17 13:03
个人简介

范德萨发而为

文章分类

全部博文(392)

文章存档

2017年(5)

2016年(19)

2015年(34)

2014年(14)

2013年(47)

2012年(40)

2011年(51)

2010年(137)

2009年(45)

分类: C/C++

2010-04-27 20:46:31

在使用模板继承时,出现了一些问题,和常规的非模板继承有区别,在此记录,原因有待解决

本文代码转自他人blog,链接搞忘了~~~

/*
 * template_scope.cpp
 *
 *  Created on: 2009-8-19 下午06:13:28
 *      Author: kwarph
 *         Web:
 *        Mail: kwarph@gmail.com
 */

#include
using namespace std;

template
class B {
    public:
        B() :
            x(0) {
            }

        explicit B(const int& v) :
            x(v) {
            }
 
        void print() const {
            cout << "B::print()" << endl;
        }

    /*如果是非模板的话,这个保护变量是可以被子类使用的,但是在模板继承中却不能*/
    protected:
        int x;
};

template
class A: public B {
    public:
        void test_scope() const {
            cout << "x = " << x << endl; // 这里会报错
             cout << "x = " << B::x << endl; // 必须显式调用父类的x

            print(); // 这里会报错
             B::print(); // 必须显式调用父类的函数
        }
};

class C {
    public:
        C() :
            x(0) {
            }

        explicit C(const int& v) :
            x(v) {
            }

        void print() const {
            cout << "C::print()" << endl;
        }

    protected:
        int x;
};

class D: public C {
    public:
        void test_scope() const {
            cout << "x = " << x << endl; // 用父类的x,输出:  x = 0
            print(); // 调用父类的print(),输出: C::print()
        }
};

int main() {
    A a;
    a.test_scope();

    D d;
    d.test_scope();
}

阅读(1662) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~