Class, Struct 그리고 변수
클래스 멤버 선언 순서
class MyClass : public OtherClass
{
public: // Note the no indent!
MyClass(); // Regular 1 tab indent.
explicit MyClass(int var);
~MyClass() {}
void SomeFunction();
void SomeFunctionThatDoesNothing() {}
void set_some_var(int var) { some_var_ = var; }
int some_var() const { return some_var_; }
private:
bool SomeInternalFunction();
int some_var_;
int some_other_var_;
DISALLOW_COPY_AND_ASSIGN(MyClass);
};
-
base 클래스명은 서브클래스명과 같은 라인에 적는다.
-
public:, protected:, private: 키워드는 들여쓰기 하지 않는다.
-
public, protected, private 순서로 구역을 나눈다. 빈 줄로 구역을 구분한다.
-
각 구역마다 method, data member 순으로 선언한다. 자세한 순서는 다음과 같다.
-
Typedef, Enums, Constants (static const)
-
생성자, 소멸자
-
method, data member (except static const)
-
구조체(structs)와 클래스(classes)
-
구조체는 자료를 담는 수동적인 객체를 위해서만 사용하고, 그 밖의 것은 클래스를 사용한다.
-
구조체에는 상수도 정의할 수 있으나 필드(멤버)를 읽고 쓰는 기능외에는 없다.
-
필드를 읽고 쓸 때는 메소드를 사용하지 않고 직접 필드에 접근한다.
-
구조체의 메소드는 필드를 setup 할 때만 사용한다. 예를들면, 생성자, 소멸자, Initialize(), Reset(), Validate() 등이다.
-
기능성이 더 필요한 경우에는 클래스를 사용한다.
-
STL과의 일관성을 위해 functors 나 traits에 대해 클래스 대신 구조체를 사용할 수 있다.
-
‘변수 이름’에서 정했듯이 구조체와 클래스 멤버 변수의 명명규칙은 다르다.
변수 이름
string table_name; // OK - uses underscore.
string tablename; // OK - all lowercase.
class Test
{
private:
string table_name_; // OK - underscore at end.
string tablename_; // OK.
}
struct UrlTableProperties
{
string name;
int num_entries;
}
-
일반적으로 변수 이름은 소문자와 밑줄문자( _ )만으로 만든다. 대문자를 섞어 쓰지 않는다.
-
클래스의 멤버 변수는 밑줄문자( _ )로 끝난다.
-
구조체의 멤버(필드)명은 클래스의 멤버 변수와 달리 밑줄문자( _ )로 끝나지 않는다.
-
전역 변수는 가급적 정의하지 않는다. 정의할 경우 전역 변수 이름은 g_ 로 시작한다.