티스토리 뷰

낙서

C++ 구조체와 클래스의 차이

nodeal 2018. 1. 14. 14:22

C와 C++에서의 구조체 차이와 연속되었다고 생각하자.


크게 말로 설명하는거보다 코드로 보는 것이 더 편할 우리를 위해 표와 코드만을 준비할 수 있었지만


접근 한정자 차이때문에 생기는 문제만 있다고 생각해도 좋다.


1. 구조체에서 접근 한정자가 정의되어있지 않다면 public이고 클래스에서는 private이다. 하지만 클래스에서 이런 짓은 하지 말자. 알더라도 명시적으로 범위로 접근 한정자를 정해줄 수 있는데 왜 이러는 것인가. 물론 Java와 같이 package-private한 기능이 있는 것도 아니고, 그냥 이럴 경우 private밑에 써주도록 하자.


struct MyStruct {
    int variable; // public
};

class MyClass {
    int variable; // private. 근데 이러지 말고

private:
    int variable; // 이렇게 하자
};



2. 구조체를 상속받을때 접근 한정자가 정의되어있지 않아면 public이고 클래스에서는 private이다. 1과는 조금 다르게 이를 위해서 굳이 안써도 될 코드를 늘릴 필요가 있는가.. 는 각자의 몫이다.


struct BaseStruct {
public:
    int variable;
};

struct DerivedStruct : BaseStruct {}; // -> struct DerivedStruct : public BaseStruct {};

class BaseClass {
public:
    int variable;
};

class DerivedClass : BaseClass {}; // -> class DerivedClass : private BaseClass {};


출처: 링크(영어)


원문에서는 구조체가 클래스를 상속받았지만, 난 그냥 클래스가 클래스를 상속받는 것으로 보였다. 작동은 그대로다.

댓글
댓글쓰기 폼