類建構函式與析構函式
類的析構函式
c++ 在 c 語言的基礎上增加了物件導向程式設計,c++ 支援物件導向程式設計。類是 c++ 的核心特性,通常被稱為使用者定義的型別。
類用於指定物件的形式,它包含了資料表示法和用於處理資料的方法。類中的資料和方法稱為類的成員。函式在乙個類被稱為類的成員。
c++ 類定義
定義乙個類,本質上是定義乙個資料型別的藍圖。這實際上並沒有定義任何資料,但它定義了類的名稱意味著什麼,也就是說,它定義了類的物件包括了什麼,以及可以在這個物件上執行哪些操作。
類定義是以關鍵字 class 開頭,後跟類的名稱。類的主體是包含在一對花括號中。類定義後必須跟著乙個分號或乙個宣告列表。例如,我們使用關鍵字 class 定義 box 資料型別,如下所示:
class box
;關鍵字 public 確定了類成員的訪問屬性。在類物件作用域內,公共成員在類的外部是可訪問的。您也可以指定類的成員為 private 或 protected,這個我們稍後會進行講解。
定義 c++ 物件
類提供了物件的藍圖,所以基本上,物件是根據類來建立的。宣告類的物件,就像宣告基本型別的變數一樣。下面的語句宣告了類 box 的兩個物件:
box box1; // 宣告 box1,型別為 box
box box2; // 宣告 box2,型別為 box
物件 box1 和 box2 都有它們各自的資料成員。
訪問資料成員
類的物件的公共資料成員可以使用直接成員訪問運算子 (.) 來訪問。為了更好地理解這些概念,讓我們嘗試一下下面的例項:
#include using namespace std;
class box
;int main( )
;
成員函式可以定義在類定義內部,或者單獨使用範圍解析運算子 :: 來定義。在類定義中定義的成員函式把函式宣告為內聯的,即便沒有使用 inline 識別符號。所以您可以按照如下方式定義 volume() 函式:
class box
};
您也可以在類的外部使用範圍解析運算子 :: 定義該函式,如下所示:
double box::getvolume(void)
box mybox; // 建立乙個物件
mybox.getvolume(); // 呼叫該物件的成員函式
讓我們使用上面提到的概念來設定和獲取類中不同的成員的值:
#include using namespace std;
class box
;// 成員函式定義
double box::getvolume(void)
void box::setlength( double len )
void box::setbreadth( double bre )
void box::setheight( double hei )
// 程式的主函式
int main( )
;
公有(public)成員
公有成員在程式中類的外部是可訪問的。您可以不使用任何成員函式來設定和獲取公有變數的值,如下所示:
#include using namespace std;
class line;
// 成員函式定義
double line::getlength(void)
void line::setlength( double len )
// 程式的主函式
int main( )
;
#include using namespace std;
class box;
// 成員函式定義
double box::getwidth(void)
void box::setwidth( double wid )
// 程式的主函式
int main( );
class smallbox:box // smallbox 是派生類;
// 子類的成員函式
double smallbox::getsmallwidth(void)
void smallbox::setsmallwidth( double wid )
// 程式的主函式
int main( )
當上面的**被編譯和執行時,它會產生下列結果:
width of box : 5
類建構函式與析構函式
類的建構函式
類的建構函式是類的一種特殊的成員函式,它會在每次建立類的新物件時執行。
建構函式的名稱與類的名稱是完全相同的,並且不會返回任何型別,也不會返回 void。建構函式可用於為某些成員變數設定初始值。
下面的例項有助於更好地理解建構函式的概念:
#include
using namespace std;
class line;
// 成員函式定義,包括建構函式
line::line(void)
void line::setlength( double len )
double line::getlength( void )
// 程式的主函式
int main( );
// 成員函式定義,包括建構函式
line::line( double len)
void line::setlength( double len )
double line::getlength( void )
// 程式的主函式
int main( )
上面的語法等同於如下語法:
line::line( double len)
假設有乙個類 c,具有多個字段 x、y、z 等需要進行初始化,同理地,您可以使用上面的語法,只需要在不同的字段使用逗號進行分隔,如下所示:
c::c( double a, double b, double c): x(a), y(b), z(c)
類的析構函式
類的析構函式是類的一種特殊的成員函式,它會在每次刪除所建立的物件時執行。
析構函式的名稱與類的名稱是完全相同的,只是在前面加了個波浪號(~)作為字首,它不會返回任何值,也不能帶有任何引數。析構函式有助於在跳出程式(比如關閉檔案、釋放記憶體等)前釋放資源。
下面的例項有助於更好地理解析構函式的概念:
#include using namespace std;
class line;
// 成員函式定義,包括建構函式
line::line(void)
line::~line(void)
void line::setlength( double len )
double line::getlength( void )
// 程式的主函式
int main( )
{ line line;
// 設定長度
line.setlength(6.0);
cout << "length of line : " << line.getlength() 《當上面的**被編譯和執行時,它會產生下列結果:
object is being created
length of line : 6
object is being deleted
C 類和物件的簡要小結
c private 私有 類 由類和友元函式訪問,也就是由類物件中的public中的成員函式訪問private,不能被子類 派生類 訪問 protected 被保護 類,可以由子類的成員函式訪問父類 派生類 的protected 成員函式定義 void box setwidth double wid...
C 類的理解 一) 類的初識
一 類的意義,以及類與物件 類的內容比較多,但類是物件導向的基礎,所謂物件導向 object 其實就是一種更高層次的模組化,也稱為封裝。c語言中,稍微複雜點的資料結構都是用結構體來寫的,結構體本質上就是把一些相關的資訊打包儲存,比如貓 struct cat 這樣我們通過鍵盤輸入很多貓的資訊就可以用結...
關於各種編碼的簡要理解
gb2312 兩個大於127的字元連在一起時,就表示乙個漢字。還重新編碼了acsii,於是被重新編碼的兩個位元組acsii就是常說的 全形 字元,而原來127以下的那些就叫做 半形 字元。gbk 只要第乙個位元組大於127,就固定表示這是乙個漢字的開始,gbk包括了gb2312的所有內容,同時又增加...