91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++構造函數和析構函數的學習(一)

發布時間:2020-07-05 23:11:03 來源:網絡 閱讀:1630 作者:liam2199 欄目:移動開發

    構造函數是類中特殊的成員函數。

    創建類類型的新對象的,系統會自動調用構造函數。

    構造函數的調用是為了保證每個數據成員都能被正確初始化。

    構造函數的作用初始化。

    通常情況下,構造函數應聲明為公有函數,構造它不能像其他成員函數那樣被顯式的調用。

    構造函數被聲明為私有有特殊的用途。

    構造函數可以有任意類型和任意個數的參數,一個類可以有多個構造函數。

    如果程序未聲明構造函數,默認會生成一個空的構造函數。

    不帶參數的構造函數稱為默認構造函數。

    如果有一個構造函數,系統不再生成默認構造函數

 

Test.h

  1. //Test.h 
  2. # ifndef _TEST_H_ 
  3. # define _TEST_H_ 
  4.  
  5. class Test 
  6. public: //如果程序未聲明構造函數,默認會生成一個空的構造函數
  7.     Test(); 
  8. private
  9.     int num_; 
  10. }; 
  11.  
  12. # endif //_TEST_H_ 

Test.cpp

  1. //Test.cpp 
  2. # include "Test.h" 
  3. # include <iostream> 
  4. using namespace std; 
  5.  
  6. Test::Test() 
  7.     num_ = 0; 
  8.     cout << "Initializing Default " << endl; 

main.cpp

 

  1. # include <iostream> 
  2. # include "Test.h" 
  3. using namespace std; 
  4.  
  5. int main(void
  6. { //自動調用構造函數
  7.     Test t; 
  8.  
  9.     return 0; 

 運行結果:

C++構造函數和析構函數的學習(一)

 //    如果有一個構造函數,系統不再生成默認構造函數

 

Test.h

  1. //Test.h 
  2. # ifndef _TEST_H_ 
  3. # define _TEST_H_ 
  4.  
  5. class Test 
  6. public: //如果程序未聲明構造函數,默認會生成一個空的構造函數
  7.     Test(int num); 
  8. private
  9.     int num_; 
  10. }; 
  11.  
  12. # endif //_TEST_H_ 

Test.cpp

  1. //Test.cpp 
  2. # include "Test.h" 
  3. # include <iostream> 
  4. using namespace std; 
  5.  
  6. Test::Test(int num) 
  7.     num_ = num; 
  8.     cout << "Initializing " << num_  << endl; 

main.cpp

 

  1. # include <iostream> 
  2. # include "Test.h" 
  3. using namespace std; 
  4.  
  5. int main(void
  6. { //自動調用構造函數
  7.     Test t(10); 
  8.  
  9.     return 0; 

 運行結果:

C++構造函數和析構函數的學習(一)

 

 

構造函數重載的實例:

 

Test.h

  1. //Test.h 
  2. # ifndef _TEST_H_ 
  3. # define _TEST_H_ 
  4.  
  5. class Test 
  6. public: //如果程序未聲明構造函數,默認會生成一個空的構造函數
  7. Test();
  8.     Test(int num); 
  9. private
  10.     int num_; 
  11. }; 
  12.  
  13. # endif //_TEST_H_ 

Test.cpp

  1. //Test.cpp 
  2. # include "Test.h" 
  3. # include <iostream> 
  4. using namespace std; 
  5.  
  6. Test::Test()
  7. {
  8. num_ = 0;
  9.     cout << "Initializing default "  << endl; 
  10.  
  11. Test::Test(int num) 
  12.     num_ = num; 
  13.     cout << "Initializing " << num_  << endl; 

main.cpp

  1. # include <iostream> 
  2. # include "Test.h" 
  3. using namespace std; 
  4.  
  5. int main(void
  6. { //自動調用構造函數
  7.     Test t1;
  8. Test t2(10); 
  9.  
  10.     return 0; 

 運行結果:

C++構造函數和析構函數的學習(一)

 

 構造函數與new運算符

  1. //構造函數與new運算符 
  2.  
  3. # ifndef _TEST_H_ 
  4. # define _TEST_H_ 
  5.  
  6. class Test 
  7. public
  8.     ////可以顯式的寫一個默認構造函數,這樣兩個函數就成了重載 
  9.     Test(); 
  10.     Test(int num); 
  11.     //析構函數不能重載 
  12.     //析構函數不能帶參數,如果帶參數就可以重載 
  13.     ~Test(); 
  14.     void Display(); 
  15. private
  16.     int num_; 
  17. }; 
  18.  
  19. # endif  

Test.cpp

  1. # include "Test.h" 
  2. # include <iostream> 
  3. using namespace std; 
  4.  
  5. void Test::Display() 
  6.     cout << num_ << endl; 
  7. Test::Test() 
  8.     num_ = 0; 
  9.     cout<<"Initializing Default" << endl; 
  10.      
  11. Test::Test(int num) 
  12.     num_ = num; 
  13.     cout<<"Initializing "<<num_ << endl; 
  14.  
  15. Test::~Test() 
  16.     cout << "Destory " << num_ << endl; 

main.cpp

  1. # include <iostream> 
  2. # include "Test.h" 
  3. using namespace std; 
  4.  
  5. int main(void
  6.     Test t; 
  7.     t.Display();  
  8.  
  9.     Test t2(20);         
  10.     t2.Display();  
  11. //不僅僅分配了內存,還調用了構造函數 
  12.     Test * t3 = new Test(20);  //new operator 
  13.     t3->Display(); 
  14. //不僅僅釋放了內存,也調用了析構函數      
  15.     delete t3; 
  16.  
  17.     return 0; 

 

運行結果:

C++構造函數和析構函數的學習(一)

 

//全局對象的構造先于main函數 

 

  1.  
  2. # ifndef _TEST_H_ 
  3. # define _TEST_H_ 
  4.  
  5. class Test 
  6. public
  7.     ////可以顯式的寫一個默認構造函數,這樣兩個函數就成了重載 
  8.     Test(); 
  9.     Test(int num); 
  10.     //析構函數不能重載 
  11.     //析構函數不能帶參數,如果帶參數就可以重載 
  12.     ~Test(); 
  13.     void Display(); 
  14. private
  15.     int num_; 
  16. }; 
  17.  
  18. # endif  

Test.cpp

  1. # include "Test.h" 
  2. # include <iostream> 
  3. using namespace std; 
  4.  
  5. void Test::Display() 
  6.     cout << num_ << endl; 
  7. Test::Test() 
  8.     num_ = 0; 
  9.     cout<<"Initializing Default" << endl; 
  10.      
  11. Test::Test(int num) 
  12.     num_ = num; 
  13.     cout<<"Initializing "<<num_ << endl; 
  14.  
  15. Test::~Test() 
  16.     cout << "Destory " << num_ << endl; 

 

main.cpp

  1. # include "Test.h" 
  2. using namespace std; 
  3.  
  4. //全局對象的構造先于main函數 
  5. Test t(10); 
  6.  
  7. int main(void
  8.     cout << "Entering main ..." << endl; 
  9.     cout << "Exiting  main ..." << endl; 
  10.  
  11.     return 0; 

運行結果:

C++構造函數和析構函數的學習(一)

 

 

    默認析構函數是一個空函數

    析構函數沒有參數

    析構函數不能被重載

 

    析構函數與數組

Test.h

  1. //Test.h 
  2. # ifndef _TEST_H_ 
  3. # define _TEST_H_ 
  4.  
  5. class Test 
  6. public
  7.     ////可以顯式的寫一個默認構造函數,這樣兩個函數就成了重載 
  8.     Test(); 
  9.     Test(int num); 
  10.     //析構函數不能重載 
  11.     //析構函數不能帶參數,如果帶參數就可以重載 
  12.     ~Test(); 
  13.     void Display(); 
  14. private
  15.     int num_; 
  16. }; 
  17.  
  18. # endif //_TEST_H_ 

Test.cpp

  1. //Test.cpp 
  2. # include <iostream> 
  3. # include "Test.h" 
  4. using namespace std; 
  5.  
  6. void Test::Display() 
  7.     cout << num_ << endl; 
  8. Test::Test() 
  9.     num_ = 0; 
  10.     cout<<"Initializing Deafule " << endl; 
  11. Test::Test(int num) 
  12.     num_ = num; 
  13.     cout<<"Initializing "<<num_ << endl; 
  14.  
  15. Test::~Test() 
  16.     cout << "Destory " << num_ << endl; 

 

main.cpp

  1. //main.cpp 
  2. # include <iostream> 
  3. # include "Test.h" 
  4. using namespace std; 
  5.  
  6. int main(void
  7. {      //定義對象數組 
  8.     Test t[2] = {10,20}; 
  9.     //動態對象 
  10.     Test* t2 = new Test(2); //傳遞參數2 
  11.     delete t2; 
  12.     //沒有傳遞任何參數,創建了兩個對象 
  13.     Test* t3 = new Test[2]; 
  14.     delete[] t3; 
  15.      
  16.     return 0; 

運行結果:

C++構造函數和析構函數的學習(一)

    析構函數不能重載

 

    析構函數不能帶參數,如果帶參數就可以重載

 

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

  1. //main.cpp 
  2. # include "Test.h" 
  3.  
  4. int main(void
  5.     Test t; 
  6.     t.~Test(); //析構函數被調用了兩次 
  7.     //析構函數很少調用,可以顯式調用 
  8.     return 0; 

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

铜梁县| 江川县| 河北省| 卓尼县| 忻州市| 称多县| 武川县| 抚宁县| 根河市| 布拖县| 敖汉旗| 余庆县| 古田县| 大化| 淮阳县| 桐城市| 怀来县| 日照市| 麻栗坡县| 福建省| 湖北省| 永登县| 绵竹市| 文化| 南通市| 邵武市| 福建省| 德清县| 长丰县| 泰来县| 长阳| 大关县| 化州市| 梁山县| 方山县| 沙河市| 神木县| 永州市| 浑源县| 大足县| 平泉县|