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
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.
Bir temel sınıf'In sanal işlev İ&...
Arayüz ve soyut sınıf arasındaki fark ...
Koşullu bir sınıf uygulamak için en iy...
Arayüz vs Temel sınıf...
Sınıf ve örnek yöntemleri arasındaki f...