結構體的初始化
阿新 • • 發佈:2021-06-20
傳統的結構體初始化方式
說到結構體的初始化,我們自然可以先定義一個結構體,然後對結構體裡面的變數逐一賦值,已達到初始化的目的。但是,這樣做的話,當結構體內變數很多時並不方便,所以此時就引出了使用建構函式的方法進行結構體的初始化。使用建構函式的方式進行初始化,簡單方便!推薦使用。
使用建構函式對結構體進行初始化
一般來說,對一個普通定義的結構體,其內部會生成一個預設的建構函式(也稱為無參建構函式)(也是不可見的)一般類似於下面這樣的形式:
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;
}
};