C 模板类继承中诡异的作用域问题
作者 佚名技术
来源 Linux系统
浏览
发布时间 2012-04-28
|
C 模板类继承中诡异的作用域问题
由 tiger » 2009-08-19 18:30
下面一段代码,大家可以试试,这样的问题经常被人忽略,出错还很难查:
- 代码: 全选
/* * template_scope.cpp * * Created on: 2009-8-19 下午06:13:28 * Author: kwarph * Web: http://www.xuanyuan-soft.cn * Mail: kwarph@gmail.com */
#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(); }
但是非模板类继承就没有这些问题. |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn
为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
|