C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[52018] Re:Re:Re:C++ 다중 상속시 복사 생성시 사용 방법
문허니 [munhoney] 1616 읽음    2008-01-22 22:12
답변 감사드립니다.

하지만, 이런 경우는 = 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할 수 있는지요..

+ -

관련 글 리스트
51987 C++ 다중 상속시 복사 생성시 사용 방법 문허니 1091 2008/01/21
51988     Re:C++ 다중 상속시 복사 생성시 사용 방법 김상면 1006 2008/01/22
51992         Re:Re:C++ 다중 상속시 복사 생성시 사용 방법 열씸! 1172 2008/01/22
52018             Re:Re:Re:C++ 다중 상속시 복사 생성시 사용 방법 문허니 1616 2008/01/22
52027                 Re:Re:Re:Re:C++ 다중 상속시 복사 생성시 사용 방법 열씸! 1329 2008/01/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.