class CChild : virtual public CParent { ...(중략) };
질문하신 부분의 답변이 될만한 내용을 msdn 에서 찾았습니다.Virtual Base class from msdn
virtual 은 diamond 상속시 애매함을 없앨때 쓸수 있었습니다.
msdn 보다 간단한 예제를 만들어 봤습니다. 다음의 코드는 모호성에 의해서 주석에서 말한 곳에서 에러가 납니다. 하지만, 내용중 주석 처리한 virtual 을 활성화 시키면 에러는 사라집니다.
#include <iostream> #include <string> using namespace std; class People{ public: string characteristic; People(){ characteristic = "숨쉬기"; } }; class Father : /* virtual */ public People{ public: Father(){ People::characteristic = "운동"; } }; class Mother: /* virtual */ public People{ public: Mother(){ People::characteristic = "요리"; } }; class Child : public Father, Mother{ public: Child(){ Mother::People::characteristic = "요리"; Father::People::characteristic = "운동"; // 이부분이 Father의 상속인지, Mother 상속인지 애매합니다. characteristic = "잠자기"; } }; int main(int argc, char** argv) { Child child; cout << child.characteristic << endl; // 출력역시 애매합니다. return 1; }
질문 올려 주셔서 감사합니다. 쓰질 안아서, 모르고 있던 C++의 표현법이었습니다.
--추가-- 아랫분께서 추가하신 부분에서 에러는 나지 않습니다. 문법상으로도 namespace 를 정확히 지칭하는 것 뿐이라 에러는 없습니다. 테스트 환경은 gccc 2.9.4 , vs.net 입니다.
그렇게 고치셔도 같은 의도라서, 상관은 없을것 같습니다. 소스상, 변수의 출처를 정확히 하기위해서 모든 namespace 를 적었습니다.
아래 코드가 에러가 나길래...
Mother::People::characteristic = "요리"; Father::People::characteristic = "운동";
수정해줬습니다...
Mother::characteristic = "요리"; Father::characteristic = "운동";
직접 예제까지 만들어 주시고.. 멋집니다 ^^b
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
인용 자료 입니다.
질문하신 부분의 답변이 될만한 내용을 msdn 에서 찾았습니다.
Virtual Base class from msdn
virtual 은 diamond 상속시 애매함을 없앨때 쓸수 있었습니다.
msdn 보다 간단한 예제를 만들어 봤습니다.
다음의 코드는 모호성에 의해서 주석에서 말한 곳에서 에러가 납니다.
하지만, 내용중 주석 처리한 virtual 을 활성화 시키면 에러는 사라집니다.
질문 올려 주셔서 감사합니다. 쓰질 안아서, 모르고 있던 C++의 표현법이었습니다.
--추가--
아랫분께서 추가하신 부분에서 에러는 나지 않습니다. 문법상으로도
namespace 를 정확히 지칭하는 것 뿐이라 에러는 없습니다.
테스트 환경은 gccc 2.9.4 , vs.net 입니다.
그렇게 고치셔도 같은 의도라서, 상관은 없을것 같습니다.
소스상, 변수의 출처를 정확히 하기위해서 모든 namespace 를 적었습니다.
저도 공부할겸...
아래 코드가 에러가 나길래...
수정해줬습니다...
직접 예제까지 만들어 주시고.. 멋집니다 ^^b
댓글 달기