낙서
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 {};
출처: 링크(영어)
원문에서는 구조체가 클래스를 상속받았지만, 난 그냥 클래스가 클래스를 상속받는 것으로 보였다. 작동은 그대로다.
반응형