クラス、構造体、列挙体の違い

通常のc++ではクラスと構造体に違いがあまりない

ただしstructはデフォルトのアクセシビリティがpublicなのに対しクラスはprivateになる

struct HogeStruct
{
	float funcA();
	private:
		int32_t a;
		float b;
	
};

class FugaClass
{
	public:
		float funcB();
	private:
		int32_t c;
		float d;
};

クラスと構造体 (C++)

上記のような違いしかないため使い分けは開発者の好みになるが、UnrealC++では明確な使い分けが指定されている。

インスタンスを値として扱う→構造体、列挙体

インスタンスをポインタ経由で扱う→クラス

このルールに従うことでUnrealC++の強力なガベージコレクションやプロパティを利用できる。

クラス

クラスはUObjectを継承する。

クラスのインスタンスへはポインタ経由でアクセスされる。

いかにAActorクラスを継承したクラスのヘッダファイルの例を示す。

#progma once

#include "GameFramework/Actor.h"//継承したクラスのヘッダ
#include "CppExampleStruct.h"
#include "CppExampleEnum.h"
#include "CppExampleActor.generated.h"//UHTによって生成されるファイル、マクロなどに必要

//UEライブラリと連携するために必要なマクロ
//このマクロに引数を指定することでクラスの性質を指定できる
//今回はBlueprintTypeと指定することでこの型がBlueprintの変数のものとして使えるようになった
UCLASS(BlueprintType)
class ACppExampleActor : public AActor{
	GENERATED_BODY() //必ずクラスの冒頭に必要なマクロ
	
	public:
	//BlueprintReadWrite : ブループリント上で読み書き可能
	//EditAnywhere : レベル上からでもエディタ上でもどこでも編集可能
		UPROPERTY(BlueprintReadWrite,EditAnywhere,Category = "UECppBook")
		FCppExampleStruct MyStructProp;
		UPROPERTY(BlueprintReadWrite,EditAnywhere,Category = "UECppBook")
		ECppExampleEnum Type;
	//BlueprintCallable : ブループリントから呼び出し可能
		UFUNCTION(BlueprintCallable,Category = "UECppBook")
		float MyActorFunc(const float Input);
}

構造体

構造体も継承元を指定することはできるが、今回はしなかった。

クラスとの大きな違い