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

  • Gimpology.com Video Tutorials

    Gimpology.co

    3 ŞUBAT 2008
  • LavcoPriceTech

    LavcoPriceTe

    21 AĞUSTOS 2010
  • LearnKey

    LearnKey

    19 AĞUSTOS 2008