[MFC] 자식 다이얼로그에서 부모 다이얼로그에 있는 멤버변수 사용
글쓴이: duraduri / 작성시간: 토, 2008/07/19 - 4:27오후
안녕하세요 이제야 서울은 비가 그쳤네요
질문이 있어 글을 올립니다.
다이얼로그 베이스로 프로젝트를 진행하고 있습니다.
이를 A다이얼로그라고 하겠습니다. A다이얼로그에서 버튼을 클릭하면
B다이얼로그가 생성됩니다. 이 B다이얼로그는 A다이얼로그 안에 위치하고요
문제는 A다이얼로그에서 그림을 그려주는데 이 그림을 B에서 똑같이 그려주고
싶습니다. 이미 A다이얼로그에서 이미지를 로드해서 메모리에 올려놨기 때문에
B다이얼로그에서는 A다이얼로그의 멤버변수 m_img를 가져와서 쓰고 싶은데
잘 되지 않네요. B다이얼로그를 생성할때 this로 A를 넘겨주었는데
B의 생성자에서 CWnd로 받더군요 그래서 멤버변수에 접근하려고하니
CWnd의 멤버가 아니라고 뭐라고 하면서 ...
이상하게 자식 클래스에서 부모의 멤버 변수를 써야 할 일이 많이 생기는데
이건 제가 설계를 잘 못한것 때문인거 같네요
이럴경우 어떻게 해결해야 할까요?
Forums:
디자인에 대해서는
디자인에 대해서는 간단하게 말하기 어려우므로 일단 접어두고, 현재 상황에서 아무튼 B에서 A의 멤버로 접근하고 싶다면 B에서 CWnd대신에 A의 포인터로 받으면됩니다.
A가 CWnd를 상속해있을테니, B의 생성자에서 A의 포인터로 받은후에, 그걸 CDialog에게 CWnd로 넘겨줘야할때 그냥 넘겨주면, 하위클래스에서 상위클래스로의 형변환이기 때문에, 자동으로 형변환됩니다.
디자인은, 처음에 적은거처럼 간단하게 말할수 있는게 아닙니다. 디자인이 잘된건지 잘안된건지 판단하는 것도 목적에 따라 달라질수 있을테고, 같은 목적을 위해서라도 다양한 디자인 방법이 존재할수 있으니까요.
예를 들어, 그림그리는 알고리즘이, 모든 CDialog에 적용가능한 것이라면, A에 다음과 같이 두가지 함수를 정의해서 쓸수 있겠죠(여기서 Image는 이미지를 나타내는 클래스 이름입니다.)
혹은, 아무 CDialog에나 적용할순 없는 경우라면, 그림을 그리기위한 인터페이스를 정의하거나 CDialog를 상속받아서 그림을 그릴수 있는 다이얼로그를 만든후, 이것들을 상속 받는 식으로 구현할수도 있겠죠.
이외에도 여러가지 방법이 있을수 있고, 여기에 적은 방법들이 적합한지, 그리고 잘짜여진건지도 보장할순 없습니다.
댓글 달기