2014-04-16 3 views
0

제목이 분명하지 않습니다. 여기 내가 설명하고있다기본 클래스를 두 번 이상 상속하는 클래스를 상속하는 방법

나는 패키지를 가지고있다라고 말하고있다 package provide test. 그것은 classes을가집니다. Itcl을 사용하고 있습니다. 내가 package test을 필요로하고 때 패키지는 다음과 같은 구조

::itcl::class classA { 
written something having constructor and methods 
} 

::itcl::class classB { 
inherit ::test::classA 
having its own constructor and methods 
} 

::itcl::class classC { 
inherit ::test::classA 
having its own constructor and methods 
} 

::itcl::class classD { 
inehrit ::test::classB ::test::classC 
having its own constructor and methods 
} 

을 데, 내가

class "::test::classD" inherits base class "::test::classA" more than once: 

오류

아래 얻고 어떻게

+0

TclOO로 전환하면이 종류의 클래스 구조를 사용할 수 있습니다. –

+0

@DonalFellows : 내 프레임 워크에서 'itcl'을 사용하고 있습니다. TclOO로 바꿀 수 없다. – Nitesh

답변

1

다이아몬드 상속이 경로 모호성으로 인해 허용되지 않는 오류를 처리 할 수 ​​있습니다. 즉,

 TopClass 
    /  \ 
LeftClass RightClass 
     \  /
    BottomClass 

으로는 오히려 상속 보다 구성 (이-A)를 사용할 수 있습니다 해결 (IS-A).

::itcl::class classA { 
} 

::itcl::class classB { 
    inherit ::test::classA 
} 

::itcl::class classC { 
    inherit ::test::classA 
} 

::itcl::class classD { 
    constructor {} { 
    set _b [::test::classB #auto] 
    set _c [::test::classC#auto] 
    } 
    destructor { 
    ::itcl::delete $_b 
    ::itcl::delete $_c 
    } 
    private { 
     variable _b "" 
     variable _c "" 
    } 
} 

이제 classD에서 코드가 기반으로하는 classB 또는 classC 경로에만 해당해야합니다.

관련 문제