程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++類的內聯成員函數應放在哪

C++類的內聯成員函數應放在哪

編輯:C++入門知識

今天復習C++ Primer的時候,看到了關於C++類的內聯成員函數的放置,應該放在頭文件中。那麼這到底是為什麼 呢?僅僅是一種代碼規范問題還是必須這樣做呢? 下面我就來講講我自己的理解吧。要徹底理解這個問題,首先就要了解下函數的聲明和定義了。我們知道,函數可以 在多處聲明,但只能在一個地方定義,不然就會出現重定義。大部分函數默認是外部鏈接,而inline函數默認為內部鏈 接。也就是說inline函數只能在本文件中使用,對其他文件是不可見的。一般我們使用某個類的時候,都是在文件中加 上該類的頭文件,以便我們可以使用該類的接口。而我們類的成員函數的實現都是放在相應的.cpp文件中的,而在.h 文件中聲明。這樣我們便可以通過.h文件中的成員函數的聲明找到其定義,繼而使用成員函數了。但如果將inline函數 放在.cpp文件中,那麼其只對.cpp文件有效,這樣我們就無法訪問它了。所以我們將其放在類的聲明的頭文件中,這 樣通過包含該頭文件來使用它。 下面寫個實際的例子來說明一下,我先把內聯函數放到類聲明的頭文件中: [cpp]   /*test.h*/   #ifndef TEST_H   #define TEST_H      #include <iostream>   using std::cout;   using std::endl;      class test   {   public:       test():x(10){}       inline void print();       void display (int y);   private:       int x;   };      void test::print()   {       cout << x << endl;   }      #endif     [cpp]   /*test.cpp*/   #include <iostream>   #include "test.h"   using std::cout;   using std::endl;      void test::display(int y)   {       cout << x * y << endl;   }     [cpp]   /*main.cpp*/   #include <iostream>   #include "test.h"   using namespace std;      int main()   {       test T;       T.display(10);       T.print();          system("pause");       return 0;   }     運行結果正常,下面來看看將內聯函數放到.cpp中去: [cpp]  /*test.h*/   #ifndef TEST_H   #define TEST_H      #include <iostream>   using std::cout;   using std::endl;      class test   {   public:       test():x(10){}       inline void print();       void display (int y);   private:       int x;   };      #endif     [cpp]   /*test.cpp*/   #include <iostream>   #include "test.h"   using std::cout;   using std::endl;      void test::print()   {       cout << x << endl;   }      void test::display(int y)   {       cout << x * y << endl;   }     測試函數和上面的main.cpp是一樣的。這是出現了錯誤: error LNK2019: 無法解析的外部符號 "public: void __thiscall test::print(void)" (?print@test@@QAEXXZ),該符號在函 數 _main 中被引用。如果我將測試函數改為: [cpp]  int main()   {       test T;       T.display(10);       //T.print();          system("pause");       return 0;   }     那麼運行結果正常。從此可以得出結論:內聯函數放在頭文件或者.cpp中都是沒有錯的,但如果我們需要在程序中訪 問它,那麼就必須將其放在頭文件中。  

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