構造和析構的基礎知識

前言

  創建一個對象時,常常需要做某些初始化的工作,例如對數據成員賦值,注意,類的數據成員是不能在聲明類時初始化的

  爲了解決這個問題,C++編譯器提供了 構造函數 來處理對象的初始化。構造函數是一種特殊的成員函數,與其他成員函數不同,不需要用戶來調用它,而是在建立對象時自動執行。


 wKioL1imXl6BYgqNAAUiUrlyFZU476.png-wh_50

2、構造函數的分類(三個)

 (1)無參構造函數   

      Test()
      {
               ;
      }

 (2)帶參數構造函數   

      Test(int a,int b)
      {
                ;
      }

 (3)賦值構造函數

      Test(const Test &obj)
      {
                ;
      }

構造函數的調用

#include <iostream>
using namespace std;

class Test
{
public:
    Test()          //無參構造函數
    {
        m_a = 0;
        m_b = 0;
        cout << "無參構造函數" << endl;
    }
    
    Test(int a)      //一個參數的有參構造函數
    {
        m_a = a;
        m_b = b;
    }
    
    Test(int a,int b)  //有參構造函數       //調用有參構造函數有三種方法
    {
        m_a = a;
        m_b = b;
        cout << "有參構造函數" << endl;
    }
    
    Test(const Test& obj)   //賦值構造函數(copy構造函數)
    {
        cout << "我也是構造函數" << endl;
    }
public:
    void print()
    {
        cout << "普通成員函數" << endl;
    }
protected:    
private:
    int m_a;
    int m_b;
}

void main()
{
    Test t1;   //無參構造函數的調用  (對象後什麼都不寫)
    
    //有參函數的第一種調用方法  括號法
    
    Test t1(1,2);  //調用兩個參數的構造函數   
    t1.ptint();
    
    //有參函數的第二種調用方法  =號法   (=操作不再是C語言中的功能。C++對= 進行了功能性增強)
    
    Test t2 = (3,4);  //調用一個參數的構造函數  因爲()號裏是逗號表達式,結果爲 4;即最後一個數    
    t2.print();
    
    Test t3 = 4;
    t2.print();      //跟 Test t2 = (3,4) 效果是一樣的
    
    //有參函數的第三種調用方法  手動的調用構造函數
    Test t4 = Test(1,2);     //調用了有兩個參數的構造函數
                             //直接調用構造函數,會產生匿名對象(涉及到匿名對象的去和留)
    
    cout << "hello" << endl;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章