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
[57924] 자답] 복사생성자가 동작하면 하위타입 데이터가 손실.
xennie [] 829 읽음    2009-08-03 11:15
따라서 포인터로 전환시키면 정상 동작을 하네요.
아... 아까운 내 하루... ^^

관심가져주신 분들께 감사드립니다. 좋은 하루 보내십시오. ^^


xennie 님이 쓰신 글 :
:
: // 우선 C++Builder 게시판에 올리게 돼 매우 조심스럽습니다.
: // 물어볼 만한 곳이 이곳 밖에 없어서 올립니다.
: // 행여 문제가 된다면 댓글주시면 삭제하겠습니다.
: 
: // 아래의 소스튼 VS 2008 SP1에서 작성했습니다.
: // composite 패턴을 사용해 본건데요.
: // 문제가 되는 부분은 아래의 주석 부분입니다.
: 
: class super
: {
: public:
: 	int GetName()
: 	{
: 		return 0;
: 	}
: 	int SetName(int n)
: 	{
: 		n_age = n;
: 		return 0;
: 	}
: 
: protected:
: 	int				n_age;
: };
: 
: typedef std::vector super_vector;
: typedef super_vector::iterator super_iter;
: 
: class leaf : public super
: {
: };
: 
: class composite : public super
: {
: public:
: 	super_vector* get_vector()
: 	{
: 		return &m_sv;
: 	}
: 
: private:
: 	super_vector		m_sv;
: };
: 
: void setup_sub(composite* pC)
: {
: 	leaf				lf1;
: 	leaf				lf2;
: 
: 	lf1.SetName(11);
: 	lf2.SetName(12);
: 
: 	pC->get_vector()->push_back(lf1);
: 	pC->get_vector()->push_back(lf2);
: }
: 
: void CrttiDlg::OnBnClickedOk()
: {
: 	// TODO: Add your control notification handler code here
: 	super_vector		sv;
: 	leaf				lf1;
: 	leaf				lf2;
: 	composite			c;
: 
: 	lf1.SetName(1);
: 	lf2.SetName(2);
: 	c.SetName(100);
: 
: 	sv.push_back(lf1);
: 	sv.push_back(lf2);
: 	sv.push_back(c);
: 
: 	setup_sub(&c);
: 
: 	for(int i=0; i < sv.size(); i++)
: 	{
: 		if(i==2)
: 		{
: 			//=============================================================================
: 			// 바로 이부분인데요.
: 			// 여기에서 형변환해서 보면 super의 형태는 정상으로 보이는데.
: 			// reinterpret_cast, dynamic_cast, static_cast 포함해서
: 			// composite로 명시적인 변환을 시도하면 composite의 멤버 super_vec이
: 			// 비정상적인 데이터입니다.
: 			// 예상했던는 2개의 데이터가 들어있어야 하는데, 쓰레기 데이터가...
: 			// 어제 하루종일 이문제로... ㅠㅠ
: 			composite* p_c = (composite*)(&sv[i]);
: 			super_vector* p_sv = p_c->get_vector();
: 			CString s_msg;
: 			s_msg.Format("sizeof composite:[%d]", p_sv->size());
: 			AfxMessageBox(s_msg);
: 			//==============================================================================
: 		}
: 	}
: }
: 

+ -

관련 글 리스트
57920 RTTI관련 질문입니다. xennie 734 2009/08/03
57924     자답] 복사생성자가 동작하면 하위타입 데이터가 손실. xennie 829 2009/08/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.