前面我們學習了如何定義類,以及如何使用類的成員,在前面我們把成員函數都定義在了類的內部,接下來我們學習,如何把類的定義和成員函數的實現分離。
在面向對象的程序開發(fā)中,一般做法是將類的聲明(其中包含成員函數的聲明)放在指定的頭文件中,用戶如果想用該類,只要把有關的頭文件包含進來即可,不必在程序中重復書寫類的聲明,以減少工作量,節(jié)省篇幅,提高編程的效率。
由于在頭文件中包含了類的聲明,因此在程序中就可以用該類來定義對象。由于在類體中包含了對成員函數的聲明,在程序中就可以調用這些對象的公用成員函數。為了實現上一節(jié)所敘述的信息隱蔽,對類成員函數的定義一般不放在頭文件中,而另外放在一個文件中。例如,可以分別寫兩個文件:
Student.h 這是頭文件,在此文僅重進行類的聲明
#pragma once
#include
#include
#include
#include
using namespace std;
class Student
{
private:
int id;
int age;
char name[10];
public:
void init(int sid = 0, int sage = 0, const char* sname = "NULL");
void showStuInfo();
};
Student.cpp 這是源文件,類的所有函數都在此文件中實現
#include "Student.h"
void Student::init(int sid, int sage, const char* sname)
{
id = sid;
age = sage;
strcpy(name, sname);
}
void Student::showStuInfo()
{
cout << id << " " << age << " " << name << endl;
}
為了組成一個完整的源程序,還應當有包括主函數的源文件:
#include"Student.h"//講類聲明頭文件包含進來
int main()
{
Student cPlus;//定義對象
cPlus.init(111,20,"C語言Plus");
cPlus.showStuInfo();
return 0;
}
類的申明和成員函數定義分離注意問題
- 和寫在里面一樣,但是需要指定作用域,在外面的函數名前面加上類名,形如【類名::函數名】 :: 雙冒號是作用域限定符
- 如果函數參數有默認參數,那么聲明和實現不能同時存在默認參數,建議保留聲明中的默認參數,讓用戶看到
如果一個Student.h同時被多個文件調用,每次都要對包含成員函數定義的源文件(如上面的student.cpp)進行編譯,這是否可以改進呢?的確,可以不必每次都對它重復進行編譯,而只需編譯一次即可。把第一次編譯后所形成的目標文件保存起來,以后在需要時把它調出來直接與程序的目標文件相連接即可。這和使用函數庫中的函數是類似的。這也是把成員函數的定義不放在頭文件中的一個好處。(靜態(tài)庫,以后會講)
在實際工作中,并不是將一個類聲明做成一個頭文件,而是將若干個常用的功能相近的類聲明集中在一起,形成類庫。類庫有兩種:
- C++編譯系統(tǒng)提供的標準類庫;
- 用戶根據自己的需要做成的用戶類庫,提供給自己和自己授權的人使用,這稱為自定義類庫。
在程序開發(fā)工作中,類庫是很有用的,它可以減少用戶自己對類和成員函數進行定義的工作量。
類庫包括兩個組成部分:
- 類聲明頭文件;
- 已經過編譯的成員函數的定義,它是目標文件。
用戶只需把類庫裝入到自己的計算機系統(tǒng)中(一般裝到C++編譯系統(tǒng)所在的子目錄下),并在程序中用#include命令行將有關的類聲明的頭文件包含到程序中,就可以使用這些類和其中的成員函數,順利地運行程序。這和在程序中使用C++系統(tǒng)提供的標準函數的方法是一樣的,例如用戶在調用sin函數時只需將包含聲明此函數的頭文件包含到程序中,即可調用該庫函數,而不必了解sin函數是怎么實現的(函數值是怎樣計算出來的)。
當然,前提是系統(tǒng)已裝了標準函數庫。在用戶源文件經過編譯后,與系統(tǒng)庫(是目標文件)相連接。在用戶程序中包含類聲明頭文件,類聲明頭文件就成為用戶使用類的公用接口,在頭文件的類體中還提供了成員函數的函數原型聲明,用戶只有通過頭文件才能使用有關的類。用戶看得見和接觸到的是這個頭文件,任何要使用這個類的用戶只需包含這個頭文件即可。包含成員函數定義的文件就是類的實現。
請?zhí)貏e注意:類聲明和函數定義一般是分別放在兩個文本中的。由于要求接口與實現分離,為軟件開發(fā)商向用戶提供類庫創(chuàng)造了很好的條件。
開發(fā)商把用戶所需的各種類的聲明按類放在不同的頭文件中,同時對包含成員函數定義的源文件進行編譯,得到成員函數定義的目標代碼。軟件商向用戶提供這些頭文件和類的實現的目標代碼(不提供函數定義的源代碼)。用戶在使用類庫中的類時,只需將有關頭文件包含到自己的程序中,并且在編譯后連接成員函數定義的目標代碼即可。
由于類庫的出現,用戶可以像使用零件一樣方便地使用在實踐中積累的通用的或專用的類,這就大大減少了程序設計的工作量,有效地提高了工作效率。
-
內部
+關注
關注
0文章
9瀏覽量
18833 -
函數
+關注
關注
3文章
4277瀏覽量
62323 -
定義
+關注
關注
0文章
10瀏覽量
14331
發(fā)布評論請先 登錄
相關推薦
評論