九、藍(lán)圖與C++:Struct結(jié)構(gòu)體
拋出問題
1.什么是結(jié)構(gòu)體?
2.在什么情況下會(huì)用的結(jié)構(gòu)體
一.以管理個(gè)人信息為例拋出結(jié)構(gòu)體
假設(shè)我們要做一個(gè)管理個(gè)人信息數(shù)據(jù)的功能,比如要存儲(chǔ)很多人的姓名,年齡,性別 信息.在沒有結(jié)構(gòu)體的情況下,我們可能會(huì)這么做?
1.創(chuàng)建3個(gè)數(shù)組分別存放姓名、年齡性別



2.輸出個(gè)人信息

3.增加一個(gè)人的信息

4.刪除一個(gè)人的信息

5.解析
從上面的操作可以看到,假如我們要存儲(chǔ)的屬性比較多,如身高,體重,生日,班級(jí),各科成績(jī)...
那豈不是每一條信息都要?jiǎng)?chuàng)建一個(gè)數(shù)組?假如有100條數(shù)據(jù),就要?jiǎng)?chuàng)建100個(gè)數(shù)組來存儲(chǔ)數(shù)據(jù).
?其次增/刪操作,每次都會(huì)對(duì)所有數(shù)組進(jìn)行操作,因?yàn)樗袛?shù)組的數(shù)據(jù)都是依靠數(shù)組索引一一對(duì)應(yīng)的,如果不對(duì)應(yīng),那么數(shù)據(jù)就混亂了,可能取數(shù)據(jù)的時(shí)候,張三的姓名,李四的年齡,王五的性別.
由此可得目前存在如下缺陷:
(1)數(shù)據(jù)擴(kuò)展不方便,每?jī)?chǔ)存一個(gè)屬性就要?jiǎng)?chuàng)建一個(gè)專門的數(shù)組
(2)數(shù)據(jù)對(duì)應(yīng)關(guān)系需要手動(dòng)維護(hù),容易出現(xiàn)對(duì)應(yīng)關(guān)系錯(cuò)誤問題
(3)數(shù)據(jù)增刪操作繁瑣,每次添加/刪除數(shù)據(jù)都要對(duì)所有數(shù)組進(jìn)行操作.
帶著這幾個(gè)問題,我們學(xué)習(xí)下struct?
二.藍(lán)圖中的Struct結(jié)構(gòu)體
1.創(chuàng)建結(jié)構(gòu)體
創(chuàng)建一個(gè)個(gè)人信息的結(jié)構(gòu)體


至此為止,我們已經(jīng)可以回答本文開頭的兩個(gè)個(gè)問題:
struct是什么:
struct是一系列變量/屬性的集合
什么時(shí)候會(huì)用到struct:
當(dāng)一條數(shù)據(jù)包含多個(gè)屬性/變量的時(shí)候
struct是一些列變量的集合這個(gè)特性也解決了數(shù)據(jù)擴(kuò)展不便的問題和數(shù)據(jù)對(duì)應(yīng)關(guān)系的問題
(1)數(shù)據(jù)擴(kuò)展不方便,每?jī)?chǔ)存一個(gè)屬性就要?jiǎng)?chuàng)建一個(gè)專門的數(shù)組
(2)數(shù)據(jù)對(duì)應(yīng)關(guān)系需要手動(dòng)維護(hù),容易出現(xiàn)對(duì)應(yīng)關(guān)系錯(cuò)誤問題
(3)數(shù)據(jù)增刪操作繁瑣,每次添加/刪除數(shù)據(jù)都要對(duì)所有數(shù)組進(jìn)行操作.
想要存儲(chǔ)一個(gè)新的屬性,只需要在結(jié)構(gòu)體中添加一個(gè)變量即可
并且一個(gè)結(jié)構(gòu)體就是一條數(shù)據(jù),數(shù)據(jù)集中在一個(gè)地方,不存在數(shù)據(jù)分散存儲(chǔ)導(dǎo)致的對(duì)應(yīng)關(guān)系混亂問題
2.使用結(jié)構(gòu)體實(shí)現(xiàn)上面的個(gè)人信息管理系統(tǒng)的增加減少信息
①輸出個(gè)人信息

②增加一個(gè)人信息

③刪除一個(gè)人信息

3)數(shù)據(jù)增刪操作繁瑣,每次添加/刪除數(shù)據(jù)都要對(duì)所有數(shù)組進(jìn)行操作.
3.藍(lán)圖中結(jié)構(gòu)體的方法
①make+結(jié)構(gòu)體名字:對(duì)結(jié)構(gòu)體填充數(shù)據(jù)

②控制結(jié)構(gòu)體變量屬性是否顯示

③控制結(jié)構(gòu)體變量屬性是否顯示

三.C++中的Struct結(jié)構(gòu)體
1.定義結(jié)構(gòu)體格式
①C++中的struct可以使用USTRUCT()宏,與UCLASS()類似,可以控制struct能否在藍(lán)圖中使用(BlueprintType使struct可以在藍(lán)圖中使用).
添加了USTRCUT()宏,需要在struct中加入GENERATED_BODY()才能正常使用.
②如果明確該結(jié)構(gòu)體只在C++中使用,可以不加USTRUCT()宏 ,同樣也不需要加GENERATED_BODY()宏語法如下
③UE中的struct要以F開頭
2.C++中的結(jié)構(gòu)體代碼
以Cpp_Actor這個(gè)C++類編寫代碼
.h文件
①C++中的結(jié)構(gòu)體與藍(lán)圖結(jié)構(gòu)體用法一致

②C++中的結(jié)構(gòu)體變量進(jìn)行賦值
.cpp文件
備注:分析一個(gè)我的錯(cuò)誤理解
C++中對(duì)結(jié)構(gòu)體的變量進(jìn)行賦值后,在藍(lán)圖以這個(gè)C++聲明的結(jié)構(gòu)體創(chuàng)建一個(gè)變量,這個(gè)變量的初始值應(yīng)該就是在c++中賦值的值 這個(gè)方法是錯(cuò)誤的?。。?/span>
解釋:
在藍(lán)圖中創(chuàng)建一個(gè)結(jié)構(gòu)體的變量與在C++中 PersonInfo PersonA(創(chuàng)建結(jié)構(gòu)體對(duì)象)其實(shí)是一個(gè)道理,在沒有賦值的情況下這個(gè)藍(lán)圖結(jié)構(gòu)體變量與C++中的結(jié)構(gòu)體對(duì)象都是空的,所以要賦值操作
3.C++中的結(jié)構(gòu)體數(shù)組使用
.h文件
.cpp文件

四.利用結(jié)構(gòu)體結(jié)合UMG做個(gè)人管理系統(tǒng)

①創(chuàng)建個(gè)人信息結(jié)構(gòu)體

②個(gè)人信息的UI(刪除)


③個(gè)人信息列表UI(添加)





