Init and Init_Implementation in a UObject Derivative class

Hi Everybody!
I’m learning to use C++ with the UE4, actually I made a derivative class of a UObject and I need to overload the Init() method. What i’ve seen is that in the .cpp of my class I should implement the Init() with the method “Init_Implementation()”, instead if directly implement “Init()”.
Then I’ll have:
MyClass.h

class MyClass : public UObject
{


protected:
UFUNCTION(BlueprintNativeEvent)
void Init();
}

MyClass.cpp


void MyClass::Init_Implementation()
{
…My Init implementation
}
Why is like that??

Things like UFUNCTION and UPROPERTY that decorate your code with are called Macros. Unreal uses a custom build tool (unsurprisingly called Unreal Build Tool) to process your C++ code and generate helper code based on it. In the case of the BlueprintNativeEvent it generates glue code which allows a Blueprint-derived class to implement your Init function. If you do not override the function in Blueprint your default C++ implementation is called.

Init_Implementation is declared in a header file, it just is declared in a header file generated by UBT. The reason for _Implementation suffix is so that it acts as a fallback default implementation.