이동 중에 가상 상속을 실현하는 방법은 무엇입니까?go lang의 가상 상속은 무엇입니까?
go lang 컴파일러 버전 : "1.3.1 windows/amd64", go lang의 "가상 상속"을 지원합니까?
"가상"을 지원할 수있는 C 언어는 들어 본 적이 없기 때문에 나는 정말로 오해하고 있습니다.
이동 중에 가상 상속을 실현하는 방법은 무엇입니까?go lang의 가상 상속은 무엇입니까?
go lang 컴파일러 버전 : "1.3.1 windows/amd64", go lang의 "가상 상속"을 지원합니까?
"가상"을 지원할 수있는 C 언어는 들어 본 적이 없기 때문에 나는 정말로 오해하고 있습니다.
Virtual Inheritance 다중 상속이없는 경우 존재하지 않는 a problem을 해결합니다. D의 회원이 말했다에 액세스 할 때 클래스 B와 C는 모두 다음 같은 이름의 데이터 멤버 (또는 그 문제에 대한 방법)를 제공하는 경우
이A
/\
B C
\/
D
, 당신은 누구 명확하게 할 수있는 방법이 필요 다음 상속 트리를 고려 액세스하려는 조상의 데이터 멤버 (또는 메소드).
가상 상속은 C++의 솔루션입니다.
처음에는 상속이 없습니다. 당신은 한 번에 주어진 유형의 구성원을 최대 1 명까지 포함시킬 수 있습니다.
http://play.golang.org/p/1iYzdoFqIC
package main
type B struct {
}
func (b B) Foo() {}
type C struct {
}
func (c C) Foo() {}
type D struct {
B
C
}
func main() {
d := D{B{}, C{}}
// d.Foo() // <- ambiguous
d.B.Foo() // <- ok
d.C.Foo() // <- ok
}
이제 "상속"과 "가상 상속"개념에 대해 더 잘 이해하게되었습니다. 그리고 이동에 대해서도 마찬가지입니다. 정말 고맙습니다. –
정확히 ...이 문제는 [공칭 하위 유형 지정] (https://en.wikipedia.org/wiki/Nominal_type_system)이있는 언어에만 관련이 있습니다. Go는 객체 지향 언어가 아니므로 해결하려는 가상 상속 문제는 적절하지 않습니다. –
"가상 상속은"더이
http://play.golang.org/p/8RvPmB3Pof
package main
type A struct {
virtual int
}
func (a *A) set(v int) {
a.virtual = v
}
func (a *A) get() int {
return a.virtual
}
type B struct {
*A
}
type C struct {
*A
}
type D struct {
*B
*C
}
func main() {
a := &A{}
b := &B{a}
c := &C{a}
d := &D{b, c}
d.B.set(3)
println(d.C.get())
return
}
예, C의 개념 ++.하지만 난 그것을 지원할 수있는 이동 누군가에게서들은 같은 것입니다. 나는 그것에 대해 들어 본 적이 없었습니다. @ nos –
소년, 그것은 복잡합니다. 사람들은 C++에서 [타입 임베딩] (http://golang.org/ref/spec#Struct_types) ("익명 유형"을 찾습니다) 및 [인터페이스 (http :// /golang.org/ref/spec#Interface_types) 또는 그 조합. – twotwotwo