C++模板类继承中诡异的作用域问题
C++模板类继承中诡异的作用域问题帖子由 tiger » 2009-08-19 18:30
下面一段代码,大家可以试试,这样的问题经常被人忽略,出错还很难查:
代码: 全选
/*
* template_scope.cpp
*
* Created on: 2009-8-19 下午06:13:28
* Author: kwarph
* Web: http://www.
* Mail: kwarph@
*/
#include <iostream>
using namespace std;
int x = 8;
void print() {
cout << "hello" << endl;
}
template<typename T>
class B {
public:
B() :
x(0) {
}
explicit B(const int& v) :
x(v) {
}
void print() const {
cout << "B::print()" << endl;
}
protected:
int x;
};
template<typename T>
class A: public B<T> {
public:
void test_scope() const {
cout << "x = " << x << endl; // 引用全局的x,输出 x = 8
// cout << "x = " << B<T>::x << endl; // 必须显式调用父类的x
print(); // 调用全局的print(),输出 hello
// B<T>::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<int> a;
a.test_scope();
D d;
d.test_scope();
}
但是非模板类继承就没有这些问题。