C++程序設(shè)計(jì)學(xué)習(xí)筆記:2 類和對象初探 構(gòu)造函數(shù)

在類中有一種函數(shù),名字與類名相同,可以有參數(shù),但不能有返回值的函數(shù)(void也不行),即為此類的構(gòu)造函數(shù)。

構(gòu)造函數(shù)的作用是初始化對象,給成員變量賦初始值。有了構(gòu)造函數(shù),我們就不必專門再寫初始化函數(shù)了,也不用擔(dān)心忘了調(diào)用初始化函數(shù)。

定義一個(gè)類時(shí),如果沒有寫構(gòu)造函數(shù),則C++編譯器會為這個(gè)類生成一個(gè)默認(rèn)的構(gòu)造函數(shù),默認(rèn)構(gòu)造函數(shù)無參數(shù),不做任何操作。只要我們定義了構(gòu)造函數(shù),編譯器就不會這樣做了。一個(gè)類可以有多個(gè)構(gòu)造函數(shù)。

對象生成時(shí),不論以何種形式生成,構(gòu)造函數(shù)都會被調(diào)用。其后,就不能再調(diào)用構(gòu)造函數(shù)了。

例如:

class A {
    private:
        int a, b;
    public:
        void set(int a, int b);
};    
//編譯器自動(dòng)生成構(gòu)造函數(shù)

A a; 
A * p = new A;
//以上默認(rèn)構(gòu)造函數(shù)被調(diào)用
class A 
{
    private:
        int a, b;
    public:
        A(int x, int y);
};
A::A(int x, int y)
{
      a = x;
      b = y;
}
A a(1,2);
A a[2] = {{1,2},{3,4}};
A * p = new A[2] {{1,2},{3,4}};
A a; //錯(cuò),沒有無參的構(gòu)造函數(shù)

一個(gè)完整的例子:

#include <iostream>

class A
{
    private:
        int a, b;
    public:
        A(int x, int y);
        void printValue();
};

A::A(int x, int y)
{
    a = x;
    b = y;
}

void A::printValue()
{
    std::cout << a << ',' << b << std::endl;
}

int main()
{
    A a(1,2);
    a.printValue();
    A * b = new A(3,4);
    b->printValue();
}
$ g++ a.cpp && ./a.out
1,2
3,4

課程錄像

北京大學(xué)郭煒/劉家瑛老師,C++程序設(shè)計(jì)課程錄像

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容