用建構函式來完成結構體的初始化

2021-10-21 13:56:10 字數 1009 閱讀 7158

說到結構體的初始化,人們會自然的想到先定義乙個結構體變數,然後對其中的元素逐一賦值,以達到初始化的目的。

但是如果這樣做,當結構體內變數很多時並不方便,此處介紹一種使用「建構函式」的方法來進行初始化,供讀者學習。

所謂建構函式就是用來初始化結構體的一種函式,它直接定義在結構體中。

建構函式的乙個特點是它不需要寫返回型別,且函式名與結構體名相同。

例子:

struct student

};

「 student(){} 」就是預設生成的建構函式,可以看到這個建構函式的函式名和結構體型別名相同;它沒有返回型別,所以student前面沒有寫東西;它沒有引數,所以小括號內是空的;它也沒有函式體,因此花括號內也是空的。由於這個建構函式的存在,才可以直接定義student型別的變數而不進行初始化(因為它沒有讓使用者提供任何初始化引數)

那麼,如果想要自己手動提供id和name的初始化引數,應該怎麼做?

struct student

};

當然建構函式也可以簡寫成一行

注意:如果自己重新定義了建構函式,則不能不經初始化就定義建構函式變數。

也就是說預設生成的建構函式 " student(){} " 此時已經被覆蓋了。為了既能不初始化就定義結構體變數,

又能享用初始化帶來的便捷,可以把 " student(){} " 手動加上。這意味著,只要引數個數和型別不完全相同,

就可以定義任意多個建構函式,以適應不同的初始化場合。

例如:

C C 建構函式初始化結構體

通常我們初始化結構體使用stu.id 1 或在讀入時進行賦值scanf d stu.id 當結構體內變數很多時很不方便。我們可以使用建構函式來解決這個問題。普通定義的結構體會生成預設建構函式studentinfo 使得我們可以只定義結構體變數而不用賦值。如果想要自己提供初始化引數,下面介紹兩種做法 ...

在函式中完成結構體的初始化

今天在實現乙個單鏈表的時候,想借助乙個函式完成煉表頭節點的初始化 include include this program is to give an examble of single list this program contain three algorithem those are ins...

結構體初始化 指定初始化

參考 c99支援結構的指定初始化專案,其語法與陣列的指定初始化專案近似。只是,結構的指定初始化專案使用點運算子和成員名 而不是方括號和索引值 來標識具體的元素。例如,只初始化book結構的成員value,可以這樣做 struct book surprise 可以按照任意的順序使用指定初始化專案 st...