int years = 2001;struct
thing
;thing amabob = ; //
valid intialization
stock hot = ; //
no! compiler error
c++ 不能像初始化 years, amabob一樣,初始化hot。原因是資料隱藏:資料部分的訪問是私有的。因此,c++提供了一類特殊的成員函式-類建構函式,專門用於構造新物件,將值賦給它們的資料成員。
1. 宣告和定義建構函式
建構函式的原型和函式名稱與類名相同,雖然沒有返回值,但沒有宣告為void型別。實際上,建構函式沒有宣告型別。
1//construct definition
2 stock::stock(const
string &co, long n, double
pr)3
10else
11 shares =n;
12 share_val =pr;
13set_tot();
14 }
程式宣告物件時,將自動呼叫建構函式。
2. 使用建構函式
(1)顯式建構函式
1 stock food = stock("word cabbage
", 250, 1.25);
(2)隱式建構函式
1 stock garment("furry mason
", 50, 2.5);
(3)new 動態分配記憶體,建立物件
1 stock *pstock = new stock("electroshock games
", 18, 19.0);
這條語句建立乙個stock物件,將其初始化為引數提供的值,並將該物件的位址賦給 pstock 指標。在這種情況下,物件沒有名稱,但可以使用指標來管理該物件。
3. 預設建構函式
預設建構函式是在未提供顯示初始值時,用來建立物件的建構函式。也就是說,它是用於下面這種宣告的建構函式
stock fluffy_the_cat; //uses the default constructor
這條語句合法的原因在於,如果沒有提供任何建構函式,c++將提供預設建構函式。它是預設建構函式的隱式版本,不做任何工作。對於stock類來說,預設建構函式可能如下:
1 stock::stock(){}
【注】當且僅當沒有定義任何建構函式時,編譯器才會提供建構函式。為類定義類建構函式,程式設計師必須為它提供預設建構函式。如果提供類非預設建構函式(如 stock::stock(const char *co, int n, double pr)), 但沒有提供預設建構函式,則下面的宣告將出錯
classstock
;// 編譯器報錯
stock::stock(
const
char* co, int n, double
pr)
下面是正確的
1class
stock2;
8 stock(const
char* co, int n, double
pr);9};
1011
stock::stock(){}
12 stock::stock(const
char* co, int n, double
pr)13
4. 析構函式
~加上類名為析構函式,如
1 stock::~stock(){}
【注】(1)如果建立的物件是static型別的,則其西溝函式將在程式結束時自動被呼叫
(2)如果物件是通過new建立的,則它將駐留在棧記憶體或自由儲存區中,當使用 delete來釋放記憶體時,其析構函式將自動被呼叫。如果建構函式使用了 new, 則必須提供使用 delete的函式。
(3)如果物件是臨時建立的,程式將在結束時自動呼叫其析構函式
5. const 成員函式
1-- stock class declaration with constructors, destructor added
2#ifndef stock10_h_
3#define stock10_h_
4class
stock512
public:13
//two constructors
14 stock(); //
default constructor
15 stock(const std::string &co, long n = 0, double pr = 0.0
);16 ~stock();
17void buy(long num, double
price);
18void sell(long num, double
price);
19void update(long num, double
price);
20void
show();
21};
22#endif
以上為stock類的原始宣告, 以下**將會發生編譯器報錯
1const stock land = stock("
kludgehorn properties");
2 land.show(); //
編譯器報錯
line2的**將會發生編譯器報錯,因為stock類的原始宣告(stock10.h中的line 20)的show() **不能確保呼叫物件不被修改
【解決方案】以下列方式成名和定義的類函式被稱為 const 成員函式。
12void show() const; 3
4void stock::show() const ;
C 類建構函式 析構函式
類的建構函式是類的一種特殊的成員函式,它會在每次建立類的新物件時執行。建構函式的名稱與類的名稱是完全相同的,並且不會返回任何型別,也不會返回 void。建構函式可用於為某些成員變數設定初始值。下面的例項有助於更好地理解建構函式的概念 include using namespace std class...
C 類建構函式 析構函式
類的建構函式是類的一種特殊的成員函式,它會在每次建立類的新物件時執行。建構函式的名稱與類的名稱是完全相同的,並且不會返回任何型別,也不會返回 void。建構函式可用於為某些成員變數設定初始值。下面的例項有助於更好地理解建構函式的概念 include using namespace std class...
C 類建構函式 析構函式
類的建構函式是類的一種特殊的成員函式,它會在每次建立類的新物件時執行。建構函式的名稱與類的名稱是完全相同的,並且不會返回任何型別,也不會返回 void。建構函式可用於為某些成員變數設定初始值。下面的例項有助於更好地理解建構函式的概念 include using namespace std class...