1. 程式人生 > >C++之帶有預設引數值的建構函式

C++之帶有預設引數值的建構函式

在一個類中 ,如果程式設計師沒有寫,任何一個建構函式,則編譯器將為該類提供一個預設的建構函式,如果程式設計師對類的建構函式進行了過載,則編譯器將不提供默建構函式,這裡需要手動書寫一個無參的建構函式,

無參的建構函式,也就是預設建構函式,

預設建構函式分為兩種:

1、不含有引數的預設建構函式

2、帶有預設引數值的建構函式

在這裡主要說的是帶有預設引數值的建構函式的使用及注意事項:

定義方法示例:

class Circle{

public:

    Circle(int a=1,int b=2,int c=3){//本建構函式是帶預設值的預設建構函式

        x=a;

        y=b;

        z=c;

    }

private:

    int x;

    int y;

    int z;

};

一個類中,一旦定義了帶有預設值的建構函式,便可以直接使用,使用方式主要有以下幾種:

在這裡仍使用上面的例子,進行演示:

Circle c1;//呼叫預設建構函式,此時,類中的私有屬性,分別初始化為x=1、y=2、z=3;

Circle c2(5);//呼叫預設建構函式,此時,類中私有屬性,分別初始化為x=5、y=2、z=3;

Circle c2(5,6);//呼叫預設建構函式,此時,類中私有屬性,分別初始化為x=5、y=6、z=3;

Circle c2(5,6,7);//呼叫預設建構函式,此時,類中私有屬性,分別初始化為x=5、y=6、z=7;

當函式中定義了帶有預設值的建構函式,在進行建構函式過載時,就不能任意的進行過載,即其它建構函式的引數,與之對用的位置,不能與帶有預設值的建構函式相同。如果不明白,可以看下面這個例子:

class Circle{

public:

    Circle(int a=1,int b=2,int c=3){//本函式是帶預設值的預設建構函式

        x=a;

        y=b;

        z=c;

    }

//    Circle(int a){//此種定義,會導致,建構函式在呼叫時,編譯器不知該如何呼叫哪個建構函式,由於帶有預設引數值的預設建構函式的出現

//        x=a;

//        y=4;

//        z=5;

//    }

//    Circle(float a){//此種定義,會導致,建構函式在呼叫時,編譯器不知該如何呼叫哪個建構函式,由於帶有預設引數值的預設建構函式的出現

//        x=(int)a;

//        y=4;

//        z=5;

//    }

public:

    void print(){

        std::cout<<"x="<<x<<"y="<<y<<"z="<<z<<endl;

    }

private:

    int x;

    int y;

    int z;

};

因此,當進行建構函式過載時,要特別注意

本文到此結束,