|
상속받은 클래스의 Constructor 에 Argument로 전달받은 내용을 할당하는 부분이 필요합니다.
GraphicsPath1::GraphicsPath1(GraphicsPath1 *arg){
*this = *arg;
}
처럼 말이죠.
이경우는 return new GraphicsPath1(*this); 가 아닌 return new GraphicsPath1(this);
처럼 Clone에서 불러 주셔야 할테고
return new GraphicsPath1(*this); 로 받으시려면 뭐 *arg대신 arg를 쓰시면 되겠지만...
내용이 많다면 스택을 이용해 많은 내용을 전달한다는게 오버헤드를 발생시키겠죠.
단, 클래스의 멤버중에 동적할당되거나 할당메모리의 포인터가 대입되는 멤버들이 있고,
해당 자원이 인스턴스당 하나만 존재해야 할때는 주소만 복사되는 형태가 의미 없으므로,
모든 동적할당코드를 Constructor안에 구현해 주셔야 합니다.
(그런 파트별 리소스들도 객체화 되어 있으면 조금 깔끔해 보이는 코딩이 될 수는 있죠.
하지만 구현시간의 압박은 증가될겁니다. 템플릿으로 찍어내 버리면 조금 편해질 수도 있지만
것도 제약사항들을 안고 있죠.)
김상면 님이 쓰신 글 :
: 질문의 요지가
:
: '생성자에서 상속받은 멤버의 초기화를 어떻게 하냐?' 이라면
:
: 대답은 간단합니다.
:
: '멤버 초기화 리스트를 사용하여라'
:
: 입니다.
:
:
:
:
:
: 문허니 님이 쓰신 글 :
: : 갑자기 복사생성자의 방법이 생각이 안나서 이렇게 글 씁니다.
: :
: : class GraphicsPath1 : public GrapihcsPath
: : {
: : GraphicsPath1();
: : GraphicsPath1(const GraphicsPath1&);
: : ~GraphicsPath1();
: :
: : GraphicsPath1* Clone();
: : };
: :
: : GraphicsPath1::GraphicsPath1(const GraphicsPath1&)
: : {
: : // GraphicsPath1 속성 전달
: : // ?? 상속한 GraphicsPath의 내용은 어떻게 복사하지요?
: : }
: :
: : GraphicsPath1* GraphicsPath1::Clone()
: : {
: : return new GraphicsPath1(*this);
: : }
: :
: :
: : 대충 이렇게 되었을때, GraphicsPath를 상속받아서 사용하는데, GraphicsPath의 Clone을 하지 못하네요
: : 그래서 전달이 잘 안되는데, 어떻게 하면 상속한 GraphicsPath 내용도 Clone할 수 있는지요..
|