程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++模板類繼承中詭異的作用域問題

C++模板類繼承中詭異的作用域問題

編輯:C++入門知識

下面一段代碼,大家可以試試,這樣的問題經常被人忽略,出錯還很難查:
  代碼: 全選

 
  /*
  * template_scope.cpp
  *
  * Created on: 2009-8-19 下午06:13:28
  * Author: kwarph
  * Web: http://www.xuanyuan-soft.cn
  * Mail: [email protected]
  */
  #include
  using namespace std;
  int x = 8;
  void print() {
  cout << "hello" << endl;
  }
  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; // 引用全局的x,輸出 x = 8
  // cout << "x = " << B::x << endl; // 必須顯式調用父類的x
  print(); // 調用全局的print(),輸出 hello
  // 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();
  }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved