如何在乙個cpp中呼叫另乙個cpp中的類?

2021-07-25 16:33:27 字數 2067 閱讀 4266

解決方案:新建乙個同名頭檔案,將這個cpp中的類的宣告放在標頭檔案中,在這個cpp以及要呼叫的cpp中include這個標頭檔案即可。

在物件導向的程式開發中,一般做法是將類的宣告(其中包含成員函式的宣告)放在指定的標頭檔案中,使用者如果想用該類,只要把有關的標頭檔案包含進來即可,不必在程式中重複書寫類的宣告,以減少工作量,節省篇幅,提高程式設計的效率。

由於在標頭檔案中包含了類的宣告,因此在程式中就可以用該類來定義物件。由於在類體中包含了對成員函式的宣告,在程式中就可以呼叫這些物件的公用成員函式。為了實現上一節所敘述的資訊隱蔽,對類成員函式的定義一般不放在標頭檔案中,而另外放在乙個檔案中。

例如,可以分別寫兩個檔案:

(這是標頭檔案,在此檔案中進行類的宣告)

class student //類宣告 ;

//在此檔案中進行函式的定義

#include

#include ″student.h″//不要漏寫此行,否則編譯通不過

void student∷display()//在類外定義display類函式

這是乙個包括3個檔案的程式,組成兩個檔案模組:

乙個是主模組main.cpp,

乙個是student.cpp。

在主模組中又包含標頭檔案student.h。在預編譯時會將標頭檔案student.h中的內容取代#include ″student.h″行。

請注意: 由於將標頭檔案student.h放在使用者當前目錄中,因此在檔名兩側用雙撇號包起來(″student.h″)而不用尖括號(),否則編譯時會找不到此檔案。

圖8.6。

在執行程式時呼叫stud中的display函式,輸出各資料成員的值。

如果乙個類宣告多次被不同的程式所選用,每次都要對包含成員函式定義的原始檔(如上面的student.cpp)進行編譯,這是否可以改進呢?的確,可以不必每次都對它重複進行編譯,而只需編譯一次即可。把第一次編譯後所形成的目標檔案儲存起來,以後在需要時把它調出來直接與程式的目標檔案相連線即可。這和使用函式庫中的函式是類似的。這也是把成員函式的定義不放在標頭檔案中的乙個好處。

在實際工作中,並不是將乙個類宣告做成乙個標頭檔案,而是將若干個常用的功能相近的類宣告集中在一起,形成類庫。

類庫有兩種:c++編譯系統提供的標準類庫;

使用者根據自己的需要做成的使用者類庫,提供給自己和自己授權的人使用,這稱為自定義類庫。

在程式開發工作中,類庫是很有用的,它可以減少使用者自己對類和成員函式進行定義的工作量。

類庫包括兩個組成部分:類宣告標頭檔案;

已經過編譯的成員函式的定義,它是目標檔案。

使用者只需把類庫裝入到自己的計算機系統中(一般裝到c++編譯系統所在的子目錄下),並在程式中用#include命令行將有關的類宣告的標頭檔案包含到程式中,就可以使用這些類和其中的成員函式,順利地執行程式。這和在程式中使用c++系統提供的標準函式的方法是一樣的,例如使用者在呼叫sin函式時只需將包含宣告此函式的標頭檔案包含到程式中,即可呼叫該庫函式,而不必了解sin函式是怎麼實現的(函式值是怎樣計算出來的)。

當然,前提是系統已裝了標準函式庫。在使用者原始檔經過編譯後,與系統庫(是目標檔案)相連線。

在使用者程式中包含類宣告標頭檔案,類宣告標頭檔案就成為使用者使用類的公用介面,在標頭檔案的類體中還提供了成員函式的函式原型宣告,使用者只有通過標頭檔案才能使用有關的類。使用者看得見和接觸到的是這個標頭檔案,任何要使用這個類的使用者只需包含這個標頭檔案即可。包含成員函式定義的檔案就是類的實現。

請特別注意:類宣告和函式定義一般是分別放在兩個文字中的。由於要求介面與實現分離,為軟體開發商向使用者提供類庫創造了很好的條件。

開發商把使用者所需的各種類的宣告按類放在不同的標頭檔案中,同時對包含成員函式定義的原始檔進行編譯,得到成員函式定義的目標**。軟體商向使用者提供這些標頭檔案和類的實現的目標**(不提供函式定義的源**)。使用者在使用類庫中的類時,只需將有關標頭檔案包含到自己的程式中,並且在編譯後連線成員函式定義的目標**即可。

由於類庫的出現,使用者可以像使用零件一樣方便地使用在實踐中積累的通用的或專用的類,這就大大減少了程式設計的工作量,有效地提高了工作效率。

iOS 如何在乙個應用程式中呼叫另乙個應用程式

在 ios 裡,程式之間都是相互隔離,目前並沒有乙個有效的方式來做程式間通訊,幸好 ios 程式可以很方便的註冊自己的 url scheme,這樣就可以通過開啟特定 url 的方式來傳遞引數給另外乙個程式。例如在 ipad 上瀏覽網頁,並且 ipad 已經安裝了 hd,那麼就開啟下面這個鏈結就會在 ...

乙個Ejb呼叫另乙個Ejb

乙個ejb呼叫另乙個ejb有兩種方法 第一是同個jndi 查詢 initialcontext ctx new initialcontext ihelloword helloworld ihelloword ctx.lookup helloworld remote 第二種 通過依賴注入 1 ejb i...

乙個Ejb呼叫另乙個Ejb

乙個ejb呼叫另乙個ejb有兩種方法 第一是同個jndi 查詢 initialcontext ctx new initialcontext ihelloword helloworld ihelloword ctx.lookup helloworld remote 第二種 通過依賴注入 1 ejb i...