C 建構函式和析構函式的學習(一)

2021-09-03 10:12:44 字數 3453 閱讀 9837

建構函式是類中特殊的成員函式。

建立類型別的新物件的,系統會自動呼叫建構函式。

建構函式的呼叫是為了保證每個資料成員都能被正確初始化。

建構函式的作用初始化。

通常情況下,建構函式應宣告為公有函式,構造它不能像其他成員函式那樣被顯式的呼叫。

建構函式被宣告為私有有特殊的用途。

建構函式可以有任意型別和任意個數的引數,乙個類可以有多個建構函式。

如果程式未宣告建構函式,缺省會生成乙個空的建構函式。

不帶引數的建構函式稱為預設建構函式。

如果有乙個建構函式,系統不再生成預設建構函式

test.h

# ifndef _test_h_

# define _test_h_

class test 

; # endif //_test_h_

test.cpp

# include "test.h"

# include 

using

namespace std; 

test::test()  

main.cpp

# include 

# include "test.h"

using

namespace std; 

int main(void)  

執行結果:

//    如果有乙個建構函式,系統不再生成預設建構函式

test.h

# ifndef _test_h_

# define _test_h_

class test 

; # endif //_test_h_

test.cpp

# include "test.h"

# include 

using

namespace std; 

test::test(int num)  

main.cpp

# include 

# include "test.h"

using

namespace std; 

int main(void)  

執行結果:

建構函式過載的例項:

test.h

# ifndef _test_h_

# define _test_h_

class test 

; # endif //_test_h_

test.cpp

# include "test.h"

# include 

using

namespace std; 

test::test()

test::test(int num)  

main.cpp

# include 

# include "test.h"

using

namespace std; 

int main(void)  

執行結果:

建構函式與new運算子

//建構函式與new運算子

# ifndef _test_h_

# define _test_h_

class test 

; # endif 

test.cpp

# include "test.h"

# include 

using

namespace std; 

void test::display() 

test::test() 

test::test(int num) 

test::~test()  

main.cpp

# include 

# include "test.h"

using

namespace std; 

int main(void)  

執行結果:

//全域性物件的構造先於main函式 

# ifndef _test_h_

# define _test_h_

class test 

; # endif 

test.cpp

# include "test.h"

# include 

using

namespace std; 

void test::display() 

test::test() 

test::test(int num) 

test::~test()  

main.cpp

# include "test.h"

using

namespace std; 

//全域性物件的構造先於main函式

test t(10); 

int main(void)  

執行結果:

預設析構函式是乙個空函式

析構函式沒有引數

析構函式不能被過載

析構函式與陣列

test.h

# ifndef _test_h_

# define _test_h_

class test 

; # endif //_test_h_

test.cpp

# include 

# include "test.h"

using

namespace std; 

void test::display() 

test::test() 

test::test(int num) 

test::~test()  

main.cpp

# include 

# include "test.h"

using

namespace std; 

int main(void) 

; //動態物件

test* t2 = new test(2); //傳遞引數2

delete t2; 

//沒有傳遞任何引數,建立了兩個物件

test* t3 = new test[2]; 

delete t3; 

return 0; } 

執行結果:

析構函式不能過載

析構函式不能帶引數,如果帶引數就可以過載

析構函式可以顯式呼叫,一般很少用到,會實現一些特殊的效果:

# include "test.h"

int main(void)  

C 學習 建構函式和析構函式

當建立物件的時候,這個物件應該有乙個初始狀態 當物件銷毀之前應該銷毀自己建立的一些資料。c 中的解決方案,建構函式和析構函式,這兩個函式將會被編譯器自動呼叫,完成物件初始化和物件清理工作 不管有沒有我們有沒有提供初始化操作和清理操作,編譯器也會增加預設的操作,只是這個預設初始化操作不會做任何事,所以...

C 建構函式和析構函式一

c 利用了建構函式和析構函式解決上述問題,這兩個函式將會被編譯器自動呼叫,完成物件初始化和清理工作。物件的初始化和清理工作是編譯器強制要我們做的事情,因此如果我們不提供構造和析構,編譯器會提供 編譯器提供的建構函式和析構函式是空實現。建構函式語法 類名 建構函式,沒有返回值也不寫void 函式名稱與...

C 建構函式和析構函式

1.建構函式是類的一種特殊方法,每次建立類的例項都會呼叫它。在建立乙個類的例項時,建構函式就像乙個方法一樣被呼叫,但不返回值。語法格式 訪問修飾符 類名 特性 1 其名字必須與類名相同,例如 public class myclass 2 不能被直接呼叫,必須通過new運算子來 呼叫。publiccl...