2013-05-06 2 views
-1

저는 객체에 약간 혼란스럽고 객체를 확장하면 어떻게 될지 생각합니다. 여기C++ 다른 클래스를 확장하는 자체 충분한 객체 만들기

내 목표는 A()) 내가 A()의 기능 등을 모두 얻을 수 있지만, 등 B() 자체를 만드는 충분한 완전히 자기를 만들 수 있도록

을 확장하여 B()를 만드는 것입니다

B()가, 어딘가에서 인스턴스화 할 때 내가 좋아하는 뭔가를 할 수 있도록 색이 자체 크기 조정 등의 위치를 ​​설정 설정 끝 :

B::B *b = new B:B(something in); 
this -> addChild(b, 1); 

그래서 때 this->하는 AddChild() 그 다음에 추가하고 일들이 내가 B()에 설정 한 방식으로 작동합니다.

B::B *b = new B:B(something in); 
b->setPosition(); 
b->setColor(); 
... 
this -> addChild(b, 1); 

캡슐화 및 상속 중입니까?

UPDATE : 그래서 나를 혼란 어떻게 생각입니다 그 경우 다음에

class A : public Z { 

} 

class b : public Z { 

} 

:

B::B *b = new B::B() 
this-> addChild(b,1) 

해서는 안이 작품?

+0

코드에서 A는 :

A *a = new A(..); 

일부의 URI : 그냥 새로운 B(), 새로운 A()를 호출? (이?) – Trax

+0

아, 고마워, 네. – Jason

답변

1

연장은 아니지만 작품을 작곡하는 것입니다.

class B : public A { ... } 

을 당신은 내 B를 포함 할 경우 당신은에서 클래스 B를 확장 할 경우 (당신은 모든 보호와 공공 방법을 얻을 그래서)

는 다음과 같이 B를 정의 할 필요가 , 당신은 단지 일을 분명히 독자에게해야합니다. 명확하지 않은 경우를 제외하고는 두 가지 옵션 모두에 상관이 없습니다. 귀하의 경우에는 addChild가 하나의 작업으로 보이는 것처럼 첫 번째 것을 선호합니다.

편집 : 좋아요. 편집을 마치면 제대로 작동합니다. B가 B 네임 스페이스 안에 있지 않으면 B :: B를 넣을 필요가 없습니다. Prefer composition over inheritance? - - http://en.wikipedia.org/wiki/Composition_over_inheritance

+0

방금 ​​업데이트를했는데 몇 가지 매우 구체적인 코드로 초를 만들 것입니다. – Jason

+0

글쎄, 실제로 내가 누락 된 개념을 이해하려고 노력 중이고 어제이 질문을 던졌습니다. http://stackoverflow.com/questions/16391953/cocos2d-x-creating-c-cclayercolor를 기반으로하는 오브젝트 – Jason

+0

이해가 잘 안되지만 컴포지션과 상속, 오브젝트를 "확장"하는 두 가지 방법 . 내 대답에 남겨진 URI를 확인하십시오. – Trax