2012-03-07 2 views
0

이 내 의심의 여지가 있습니다 : 나는 두 클래스 A를 가지고 B. 내가 쓸 수 있습니다 : 공개 객체를 상속하거나 사용하는 것이 가장 좋습니다.

class A: public B {....} 

그래서 an_instance_of_A는 B 방법을 사용할 수 있습니다.

그러나 나는 또한 다음과 같이 작성할 수있다 :

class A { 
public: 
B instance_B; 
} 

그래서 an_instance_of_A는 instance_B 방법을 사용할 수 있습니다. (즉, B 방법).

나는 똑같이 할 수있다. 무엇이 가장 좋습니까? 컴파일하는 것이 빠른 무엇입니까? 똑같은가요? 감사합니다. .

+0

다릅니다. 'A'와'B'는 무엇입니까? 'A'는'B'입니까? 왜 공개해야합니까? 편집 속도는 정확한 디자인만큼 중요하지 않으며 (극단적 인 상황을 제외하고) 좋은 ​​디자인은 컴파일 시간이 오래 걸리는 경우는 거의 없습니다. –

+1

문제는 방법을 사용하는 것이 아니라 문제에 가장 적합한 디자인을 선택하는 것입니다. 이것을 둘러싼 주제에 대한 책 더미가 있습니다. wikipedia에서 시작할 수 있습니다 : http://en.wikipedia.org/wiki/Composition_over_inheritance, http://en.wikipedia.org/wiki/Circle-ellipse_problem 그리고 거기에서 계속하십시오. – dbrank0

+0

가능한 복제본 [상속보다 컴포지션?] (http://stackoverflow.com/questions/49002/prefer-composition-over-inheritance) –

답변

0

공개 상속은 이 - 인 관계를 설명합니다. 즉, B로 할 수있는 일은 A로 할 수 있습니다.

공개 대상은 완전히 다른 것이며 공통점이 없습니다. A에 B가 둘 이상있을 경우 상속을 사용할 수 없으므로 구성 (구성원 개체)을 사용하십시오. 그들이 공개되어야하거나 그렇지 않으면 A와 B에 의존하고 어떻게 그들을 사용하고 싶습니다.

편집,이 질문은 가까운 일치 중복 같다 :

Prefer composition over inheritance?

제임스가 말했듯이, 특별한 경우를 제외하고 상속 또는 구성 사이에 선택할 때 우선 순위가 높은이어야한다 시간을 컴파일합니다.

2

은 "is-a"관계가있을 때을 상속합니다. vehiclecar 사이입니다.

"포함"또는 "구성하는"유형의 realtion이있는 경우 데이터 멤버를 사용합니다. class schoolclass teacher, class student

0

으로 구성됩니다. 앞서 말했듯이 공개 상속은 A가 B (예 : 작업자도 사람) 인 경우에만 사용해야합니다.

클래스 내부에 객체 인스턴스가 있으면 public이 아닌 한 테스트 및 캡슐화가 더 좋습니다. POD를 제외한 회원을 공개하지 마십시오. 이로 인해 여러 가지 문제가 발생합니다 (예 : 다른 사람이 수업의 성실성을 쉽게 깨뜨릴 수 있음).

관련 문제