2012-09-07 35 views
6
  1. Sanal kalıtım vTable kullanıyor mu? Evet veya hayır ise, o zaman nasıl uygulandı
  2. Bellekte sanal miras nasıl davranır?
  3. sanal miras

yönelik diğer tüm alternatif Gerçekten kavramsal bir açıklama için teşekkür ederiz.Sanal devralma nasıl çalışır?

+0

Uygulama tanımlı. – ildjarn

+0

Uygulamaya bağımlıdır, kesin teknik terimlerle ifade edilir * Belirtilmemiş *, C++ standardı sadece sanal mirasın sunabileceği davranışları tanımlar ancak nasıl uygulanacağını belirtmez. Uygulamalar için bir ayrıntı olarak dışarıda bırakılır. Bu ayrıntıyı belirtmek için gerekli değildir. Kurucuların çoğu (* bilinen tüm okunan *) sanal bir tablo ve işaretçi mekanizması kullandığını söyledi. –

+1

Yukarıda belirtildiği gibi, Q'nun alakasız olduğunu veya gerçek bir Q olduğunu düşünmeyin. Tüm derleyiciler benzer bir mekanizma kullanırlar ve uygulama detaylarını bilmek gerekmese de, bunu bilmek zarar vermez. Ayrıca, bu Q bir kez çok zaman sorulur ve inandırıcı cevaplarsa güzel C++ - SSS yapar. –

cevap

1

Sanal devralma, derleyiciye bağlı olarak farklı şekilde uygulanır.

1) Evet, hem vc hem de gcc vTable işaretçisini kullan. Ama vc sanal taban işaretçisi olarak başka bir işaretçi ref var.

2) Klasik bir sanal devralma için, örneğin Sol < Top; Sağ < Üst; Alt < Sol ve Sağ yığını böyle olmalı:

Left.vptr // -> to its vtable 

Left::element_in_left 

Right.vptr 

Right::element_in_right 

Bottom::element_in_bottom 

Top::element_in_top 

Programlar gcc için, yaşayabilir değeri ofset sanal taban var, vtable bulmak için vptr kullanın. vptr + taban ofset ana adresi verecektir. 3) Ne demek istediğinden emin değilim. C++ derleyicilerinde uygulamak için farklı yollar vardır. Ve diğer diller işlevleri bağlama yolları vardır.

+0

Çok teşekkür ederim! Bu karmaşık bir yapıya benziyor! Bunu okumak için bana basit bir makale veya kitap önerebilir misiniz? –

+0

@NayanaAdassuriya Bu bilgileri ana dil yayınlarımda okudum, bu yüzden İngilizce kitapları bilmiyorum. Google'da "C++ bellek düzeni sanal devralma" araması yapabileceğinizi tahmin ediyorum. Çok sayıda harika yayın var. – halfelf