SORU
22 AĞUSTOS 2008, Cuma


C , sanal bir temel sınıf nedir?

Bir şeyi bilmek istiyorum "sanal temel sınıf" ve bu anlama gelir.

Bana bir örnek vereyim:

class Foo
{
public:
    void DoSomething() { /* ... */ }
};

class Bar : public virtual Foo
{
public:
    void DoSpecific() { /* ... */ }
};

CEVAP
22 AĞUSTOS 2008, Cuma


Sanal temel sınıflar, sanal miras olarak kullanılan, "" belirli bir sınıfın birden çok devralma kullanırken bir devralma hiyerarşisinde görünen örneklerinin birden fazla önlemenin bir yoludur

Aşağıdaki senaryoyu düşünün:

class A { public: void Foo() {} };
class B : public A {};
class C : public A {};
class D : public B, public C {};

Yukarıda sınıf hiyerarşisi sonuçları "korkunç elmas" olan bu gibi görünüyor:

  A
 / \
B   C
 \ /
  D

D bir iki örnek var ve bu Yüzden de A. içeren Bir içeren B ve C olacak "örnekleri" daha iyi bir ifade İçİn () A

Bu senaryo, belirsizlik ihtimali var. Bunu yaptığınızda ne olur:

D d;
d.Foo(); // is this B's Foo() or C's Foo() ??

Sanal miras bu sorunu çözmek için vardır. Sizin sınıfları devralmasını sanal belirtirken, sadece tek bir örnek istiyorum derleyici söylüyorsun.

class A { public: void Foo() {} };
class B : public virtual A {};
class C : public virtual A {};
class D : public B, public C {};

Bu "" Bir hiyerarşiye dahil. örnek sadece bir tane var anlamına gelir Dolayısıyla

D d;
d.Foo(); // no longer ambiguous

Yardımcı olan mini bir özeti gibi umut. Daha fazla bilgi için this this bir okuma var. İyi bir örnek de 14 ** mevcuttur.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bart Baker

    Bart Baker

    1 Aralık 2006
  • ColdfusTion

    ColdfusTion

    3 Aralık 2007
  • Truc Minh

    Truc Minh

    23 Ocak 2011