OOP 2.2 構造函數

一、概念

  • 成員函數的一種
  • 名字與類名相同,能夠有參數,沒有返回值(void也不行)
  • 做用:對對象進行初始化,如給成員函數賦初始值
  • 若是定義時沒有構造函數,則編譯器生成一個默認無參數的構造函數
    • 默認構造函數無參數,不進行任何操做
  • 構造函數是在對象已經佔用存儲空間後,對對象進行一些初始化工做
  • 對象生成時構造函數自動被調用。對象一旦生成,就不再能在其上執行構造函數
  • 一個類能夠有多個構造函數
  • 構造函數的意義:構造函數執行必要的初始化工做,有了構造函數就沒必要專門寫初始化函數,也不用擔憂忘記調用初始化函數
    e.g.
class complex{
    pravate:
        double real,imag;
    public:
        viod set(double r,double i);
};//編譯器自動生成默認構造函數
complex c1;//默認構造函數被調用
complex *pc=new complex;//默認構造函數被調用

e.g.數組

class complex{
    private:
        double real,imag;
    public:
        complex(double r,double i=0);
};
complex::complex(double r,double i){
    real=r;imag=i;
}
complex c1;//error 缺乏構造函數的參數
complex *pc=new complex;//error 缺乏參數
complex c1(2);//OK
complex c1(2,4),c2(3,5);//OK
complex *pc=new complex(3,4);//OK
  • 能夠有多個構造函數(重載),參數個數或類型不一樣

二、構造函數在數組中的使用

class cs{
    int x;
    public:
    cs(){
        cout<<"1 called"<<endl;
    }
    cs(int n){
        x=n;
        cout<<"2 called"<<endl;
    }
};
int main()
{
    cs array1[2];
    cout<<"step1"<<endl;
    cs array2[2]={4,5};
    cout<<"step2"<<endl;
    cs array3[2]={3};
    cs *array4=new cs[2];
    delete []array4;
    return 0;
}
/*
output:
1 called
1 called
step 1
2 called
2 called
step 2
2 called
1 called
step3
1 called
1 called
*/

e.g.函數

相關文章
相關標籤/搜索