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;   

};

因此,當進行構造函數重載時,要特別注意。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM