|
답변 감사드립니다.
하지만, 이런 경우는 = operator 생성자를 해주어야 할것 같군요..
그리고, 제가 원하는 것은
Gdi+::GrapihcsPath 를 상속받은 GrapihcsPath1이라는 클래스를 만드는 것이지요.
Gdi+::GrapihcsPath의 내용은 알 수가 없는 상태이고,
GrapihcsPath1에서 clone을 사용하고 싶다는 것입니다.
일단 클론을 하게 되면, GrapihcsPath1에 대한 멤버변수를 deep copy를 해야겠지요. 이것은
복사 생성자에서 할 수 있지만, 문제는 부모 클래스의 내용을 어떻게 복사하냐는 것입니다.
즉,
GraphicsPath1::GraphicsPath1(const GraphicsPath1&)
{
// GraphicsPath1 멤버 변수 복사
// 상속한 GraphicsPath 복사
}
가 이루어져야 할 것 같은데,
상속된 GraphicsPath를 어떻게 복사하냐라는 것입니다.
그럼 답변 부탁드립니다. 꾸벅.
열씸! 님이 쓰신 글 :
: 상속받은 클래스의 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할 수 있는지요..
|