在使用模板继承时,出现了一些问题,和常规的非模板继承有区别,在此记录,原因有待解决
本文代码转自他人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) |