# Godot module style guide and conventions > Specifically for use with [godot-cpp-template](https://git.objectionable.solutions/hertog/godot-module-template). ## Header Files ```cpp // #define-based header guards are required, // and have to match the name has to match the filename #ifndef MY_CLASS_H #define MY_CLASS_H // PascalCase for all types class MyClass : public Object { GDCLASS(MyClass, Object); // functions have to be snake_cased static void _bind_methods(); void on_some_signal(); // signal listeners have to be private unless they have to be publicly accessible otherwise public: void do_things(); // getters and setters go after other types of functions, closest to the variables. void set_my_var(int value); // set first int get_my_var() const; // get function goes second, and should be const if possible // private variables go at the bottom private: int myvar{ 1 }; // variables are snake_case, and always initialized in headers unless impossible // (e.g, const vars that get initialized in constructors) String const sig_some_signal{ "some_signal" }; // store signal names in a variable to make them easier to keep track of }; #endif // !MY_CLASS_H // end #if/#ifdef/#ifndef directives with a repeat of the condition ``` # Implementation Files ```cpp #include "my_class.h" // the matching header always goes on top, other header includes come after in alphabetical order #include "macros.h" void MyClass::_bind_methods() { BIND_PROPERTY(Variant::INT, my_var); // use macros.h simplified property binding macros when possible } void MyClass::do_things() { set_my_var(10); // this-> is not required for class methods cast_to(this); // static class methods don't require scope specification. // use self_type when referring to the type of 'this' this->connect(this->sig_some_signal, callable_mp(this, &self_type::on_some_signal)); } void MyClass::set_my_var(int value) { // all uses of member variables REQUIRE this-> this->my_var = value; } int MyClass::get_my_var() const { return this->my_var; } ```