c++ 기본적인 질문 있습니다.
글쓴이: yeons / 작성시간: 월, 2020/10/05 - 1:57오후
아래와 같이 c++ 에서 똑같이 btAge 와 GetAge 함수에 접근할 수 있지만 방법은 다른데,
구조체를 중첩하는 것과
구조체를 상속 받아 사용 하는 것의 차이점이 있을까요?
각각 장단점이 있는지도 궁금합니다.
struct stEmployee { BYTE btAge; std::string Name; BYTE GetAge() { return btAge; } }; struct stSamSung { int nID; stEmployee sCEO; }; struct stNC : public stEmployee { int nID; }; void nFuntion() { stSamSung sSamSung; sSamSung.sCEO.btAge = 5; printf("sSamSung.sCEO.btAge : %d\n", sSamSung.sCEO.GetAge()); stNC sNC; sNC.btAge = 1; printf("stNC.btAge : %d\n", sNC.GetAge()); system("PAUSE"); }
Forums:
중첩과 상속은, 구조체(클래스)로 모델링하고 있는
중첩과 상속은, 구조체(클래스)로 모델링하고 있는 대상의 특성에 맞게 선택할 문제 아닐까요?
stSamsung과 stNC가 프로야구팀을 모델링하는 구조체라면 stEmployee를 상속하기보다는 중첩해서 쓰는 것이 적절하겠죠. sSamSung.sCEO.getAge() 를 보면서 삼성팀의 구단주 나이라고 직관적으로 파악할 수도 있고요. 만약 stSamsung 클래스에 btAge 멤버와 get함수를 추가한다면 sSamSung.sCEO.getAge()는 구단주 나이, sSamSung.getAge()는 구단의 연차가 될 수 있겠네요.
중첩이 어울릴 자리에 상속을 쓰거나 또는 그 반대로 할 경우, 어떻게든 목적은 이룰 수 있다고 해도, 코딩 과정이나 추후 코드 파악/관리에는 시간이 갈수록 큰 어려움이 생길 가능성이 클 것입니다.
그때그때 다른거지 장단점을 논할수는 없겠네요
stSamsung 는 구조체의 멤버 변수로서 해당 구조체(stEmployee) 를 접근하고
stNC 는 상위 구조체(stEmployee) 를 접근하는 차이죠
사용하는 방식은 코드에 있듯이 다르게 접근해야 되죠
멤버 변수로 구조체를 사용하는걸 님은 중첩이라고 표현하셨지만 stSamsung 의 관점에서 봤을때는 int nID 와 다를게 없습니다.
요는 설계에 있습니다.
여러개의 구조체를 멤버 변수로 쓰거나 혹은 잘 조직된 구조체를 상속받아 쓰는 방식을 쓰는거죠
------------------------------------------------------------
ProgrammingHolic
한편...
한편...
인간의 나이는 8비트 변수로 충분히 표현가능한가? 하는 생각이 스쳐갑니다.
인류 문명과 의료의 발달과 연관하여.. 수명연장. 냉동인간.....
역사와 전통을 자랑하는 질문이지요.
역사와 전통을 자랑하는 질문이지요.
https://stackoverflow.com/questions/2399544/difference-between-inheritance-and-composition
댓글 달기