歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

在上篇文章《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.   
  11. void tt()  
  12. {  
  13. }  

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. }  
  12.       

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

顯示鏈接錯誤,因為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