歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++:成員函數實現在類定義中與在類定義外的區別

C++:成員函數實現在類定義中與在類定義外的區別

日期:2017/3/1 10:20:06   编辑:Linux編程
在上篇文章《inline的另一用處》(見 http://www.linuxidc.com/Linux/2012-06/62558.htm )中,提到函數實現在類定義中與類定義外的區別。

現在先看個實驗:

a.cpp:

  1. #ifndef TEST_H
  2. #define TEST_H
  3. class A{
  4. public:
  5. int fun(int x){
  6. return (x*x+1000);
  7. }
  8. };
  9. #endif
  10. void tt()
  11. {
  12. }

b.cpp:

  1. class A{
  2. public:
  3. int fun(int x);
  4. };
  5. void tt();
  6. int yy()
  7. {
  8. tt();
  9. A a;
  10. return a.fun(3);
  11. }

將它們分別編譯後再鏈接:

顯示鏈接錯誤,因為b.cpp(b.o)中找不到A::fun(int)的引用。

將以上的a.cpp改為如下所示:

  1. #ifndef TEST_H
  2. #define TEST_H
  3. class A{
  4. public:
  5. int fun(int x);
  6. };
  7. #endif
  8. int A::fun(int x){
  9. return (x*x+1000);
  10. }
  11. void tt()
  12. {
  13. }


分別編譯a.cpp和b.cpp為a.o和b.o後鏈接,顯示鏈接成功。

這樣,第一次鏈接錯誤的原因就很明顯了。

結論:

在類定義中的類成員函數實現有文件內部作用域,而在類定義外部的類實現有的是全局作用域。

Copyright © Linux教程網 All Rights Reserved