1. 程式人生 > 其它 >結構體的初始化

結構體的初始化

傳統的結構體初始化方式

說到結構體的初始化,我們自然可以先定義一個結構體,然後對結構體裡面的變數逐一賦值,已達到初始化的目的。但是,這樣做的話,當結構體內變數很多時並不方便,所以此時就引出了使用建構函式的方法進行結構體的初始化。使用建構函式的方式進行初始化,簡單方便!推薦使用。

使用建構函式對結構體進行初始化

一般來說,對一個普通定義的結構體,其內部會生成一個預設的建構函式(也稱為無參建構函式)(也是不可見的)一般類似於下面這樣的形式:

struct studentInfo{
    int id;
    char gender;
    //預設生成的建構函式
    studentInfo(){}
};

可以看到這個建構函式的函式名和結構體名稱相同,它沒有返回型別,它也沒有引數,函式體也是空的。由於這個建構函式的存在,才可以直接定義studentInfo型別的變數而不進行初始化。(因為它沒有讓使用者提供任何的初始化引數)

那麼如果我們想要自己手動提供id和gender的初始化引數,應該怎麼做?我們可以自己寫一個有引數的建構函式,通過這個有參的建構函式,我們就可以結構體內的變數進行初始化操作。具體形式是這樣的:

struct studentInfo{
    int id;
    char gender;
    //下面自己寫的有參構造方法用以對結構體內部變數進行賦值
    studentInfo(int _id, char _gender){
        //賦值
        id = _id;
        gender = _gender;
    }
}

當然,建構函式也可以簡化成一行:
struct studentInfo{
    int id;
    char gender;
    //這個建構函式將上面的建構函式簡化成了一行
    studentInfo(int _id, char _gender) : id(_id), gender(_gender) {}
}

定義完有參的構造方法之後,我們就可以使用如下語句進行初始化,例如:id為10086 性別為M(代表man)

studentInfo stu = studentInfo(10086,'M');

建構函式定義的注意事項

如果自己重新定義了一個建構函式,那麼原先預設的無參建構函式就被覆蓋了。這就代表你就不可以不經初始化就建立結構體變量了。那麼,如果你既想不經初始化就建立結構體變數,又想按照指定的引數去初始化結構體變數的話,你可以在自定義有參的構造方法後,再重新新增一個無參的構造方法。這時,你就可以不經初始化就建立結構體變量了。並且,建構函式可以重名,只要引數個數和型別不完全相同。這就代表了,你可以去建立多種初始化結構體變數的方式。例如:

struct studentInfo{
    int id;
    char gender;
    //用以不初始化就定義結構體變數
    studentInfo(){}
    //只初始化gender
    studentInfo(char _gender){
        gender = _gender;
    }
    //同時初始化id和gender
    studentInfo(int _id, char _gender){
        id = _id;
        gender = _gender;
    }
};