武漢達內IT培訓
美國上市IT培訓機構

18571612865

熱門課程

武漢IT培訓:c++中的接口的使用

  • 時間:2019-08-09 16:50
  • 發布:湖北達內培訓學校
  • 來源:IT教程

今天帶給大家的干貨知識是c++中的接口的使用

C++通過類來實現封裝性,把數據和與這些數據有關的操作封裝在一個類中,或者說,類的作用是把數據和算法封裝在用戶聲明的抽象數據類型中。

實際上用戶往往并不關心類的內部是如何實現的,而只需知道調用哪個函數會得到什么結果,能實現什么功能即可。
在聲明了一個類以后,用戶主要是通過調用公用的成員函數來實現類提供的功能(例如對數據成員設置值,顯示數據成員的值,對數據進行加工等)。因此,公用成員函數是用戶使用類的公用接口(public interface),或者說

類的對外接口

類中被操作的數據是私有的,實現的細節對用戶是隱蔽的,這種實現稱為私有實現(private implementation)。這種“類的公用接口與私有實現的分離”形成了信息隱蔽。

軟件工程的一個最基本的原則就是將接口與實現分離,信息隱蔽是軟件工程中一個非常重要的概念。它的好處在于:

如果想修改或擴充類的功能,只需修改本類中有關的數據成員和與它有關的成員函數,程序中類外的部分可以不必修改。

如果在編譯時發現類中的數據讀寫有錯,不必檢查整個程序,只需檢查本類中訪問這些數據的少數成員函數。

類聲明和成員函數的分離

在面向對象的程序開發中,一般做法是將類的聲明(其中包含成員函數的聲明)放在指定的頭文件中,用戶如果想用該類,只要把有關的頭文件包含進來即可。
由于在頭文件中包含了類的聲明,因此在程序中就可以用該類來定義對象。由于在類體中包含了對成員函數的聲明,在程序中就可以調用這些對象的公用成員函數。
為了實現上一節所敘述的信息隱蔽,對類成員函數的定義一般不放在頭文件中,而另外放在一個文件中。

例如,可以分別寫兩個文件:

student.h頭文件
//這是student.h頭文件,在此文件中進行類的聲明 class Student //類聲明 { public : void display( );//公用成員函數原型聲明 private : int num; char name[20]; char sex; };
student.cpp
// 在此文件中進行函數的定義 #include <iostream> #include "student.h"http://不要漏寫此行,否則編譯通不過 void Student::display()//在類外定義display類函數 { cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; cout<<"sex:"<<sex<<endl; }

為了組成一個完整的源程序,還應當有包括主函數的源文件(main.cpp):
// 主函數模塊 #include <iostream> #include ″student.h″ //將類聲明頭文件包含進來 int main( ) { Student stud; //定義對象 stud.display( ); //執行stud對象的display函數 return 0; }

這是一個包括3個文件的程序,組成兩個文件模塊:一個是主模塊main.cpp,一個是student.cpp。在主模塊中又包含頭文件student.h。在預編譯時會將頭文件student.h中的內容取代#include ″student.h″行。
請注意,由于將頭文件student.h放在用戶當前目錄中,因此在文件名兩側用雙撇號包起來(″student.h″)而不用尖括號(<student.h>),否則編譯時會找不到此文件。

<a style='color:blue' href='http://www.lfddz.com/'>武漢IT培訓</a>班

使用C++編譯系統對兩個源文件main.cpp和student.cpp分別進行編譯,得到兩個目標程序main.obj和student.obj,然后將它們和其他系統資海連接起來,形成可執行文件main.exe,  注意,目標文件的后綴在不同的C++編譯系統中是不同的,例如在GCC中,后綴是 .o,這里使用 .obj 是對VC 6.0而言。

在運行程序時調用stud中的display函數,輸出各數據成員的值。

有的讀者可能會考慮這樣一個問題:如果一個類聲明多次被不同的程序所調用,每次都要對包含成員函數定義的源文件(如上面的student.cpp進行編譯,這是否可以改進呢?的確,可以不必每次都對它重復進行編譯,而只需編譯一次即可。把第一次編譯后所形成的目標文件保存起來,以后在需要時把它調出來直接與程序的目標文件相連接即可。 這和使用函數庫中的函數是類似的。
這也是把成員函數的定義不放在頭文件中的一個好處。如果對成員函數的定義也放在類聲明的頭文件中,那么在對使用這些類的每一個程序的每一次編譯時都必然包括對成員函數定義的編譯,即同一個成員函數的定義會多次被重復編譯。只有把對成員函數的定義單獨放在另一文件中,才能做到單獨編譯。

在實際工作中,并不是將一個類聲明做成一個頭文件,而是將若干個常用的功能相近的類聲明集中在一起,形成類庫。
類庫有兩種:一種是C++編譯系統提供的標準類庫;—種是用戶根據自已的需要做成的用戶類庫,提供給自己和自己授權的人使用,這稱為自 定義類庫。在程序開發工作中,類庫是很有用的,它可以減少用戶自己對類和成員

數進行定義的工作量。

類庫包括兩個組成部分:類聲明頭文件;已經過編譯的成員函數的定義,它是目標文件。

用戶只需把類庫裝入到自己的計算機系統中(一般裝到C++編譯系統所在的子目錄下),并在程序中用#include命令行將有關的類聲明的頭文件包含到程序中,就可以使用這些類和其中的成員函數,順利地運行程序。這和在程序中使用C++系統提供的標準函數的方法是一樣的,例如用戶在調用sin函數時只需將包含聲明此函數的頭文件包含到程序中,即可調用該庫函數,而不必了解sin函數是怎么實現的(函數值是怎樣計算出來的)。
當然,前提是系統已裝了標準函數庫。在用戶源文件經過編譯后,與系統庫(是目標文件)相連接。

在用戶程序中包含類聲明頭文件,類聲明頭文件就成為用戶使用類的公用接口,在頭文件的類體中還提供了成員函數的函數原型聲明,用戶只有通過頭文件才能使用有關的類。用戶看得見和接觸到的是這個頭文件,任何要使用這個類的用戶只需包含這個頭文件即可。包含成員函數定義的文件就是類的實現。

請特別注意,類聲明和函數定義一般是分別放在兩個文本中的。由于要求接口與實現分離,為軟件開發商向用戶提供類庫創造了很好的條件。
開發商把用戶所需的各種類的聲明按類放在不同的頭文件中,同時對包含成員函數定義的源文件進行編譯,得到成員函數定義的目標代碼。軟件商向用戶提供這些頭文件和類的實現的目標代碼(不提供函數定義的源代碼)。用戶在使用類庫中的類時,只需將有關頭文件包含到自己的程序中,并且在編譯后連接成員函數定義的目標代碼即可。

由于類庫的出現,用戶可以像使用零件一樣方便地使用在實踐中積累的通用的或專用的類,這就大大減少了程序設計的工作量,有效地提高了工作效率。好了,關于c++中的接口的使用今天就講到這里,更多關于c++的相關教程請關注達內武漢IT培訓官方網站。

馬上預約七天免費試聽課

姓名:

電話:

上一篇:武漢IT培訓:ios設計模式之Model-View-Controller
下一篇:武漢IT培訓:c++的命名空間的使用

有位老師想和您聊一聊

選擇城市和中心
江西省

貴州省

廣西省

海南省

欧美高清vivoes69