The 'virtual void foo () = 0;' sintaks tidak berarti Anda tidak dapat mengimplementasikan foo () di kelas saat ini, Anda bisa. Ini juga tidak berarti Anda harus mengimplementasikannya di kelas turunan . Sebelum Anda menampar saya, mari kita amati Masalah Intan: (Kode implisit, ingatlah).
class A
{
public:
virtual void foo()=0;
virtual void bar();
}
class B : public virtual A
{
public:
void foo() { bar(); }
}
class C : public virtual A
{
public:
void bar();
}
class D : public B, public C
{}
int main(int argc, const char* argv[])
{
A* obj = new D();
**obj->foo();**
return 0;
}
Sekarang, permohonan obj-> foo () akan menghasilkan B :: foo () dan kemudian C :: bar ().
Anda lihat ... metode virtual murni tidak harus diimplementasikan di kelas turunan (foo () tidak memiliki implementasi di kelas C - kompiler akan dikompilasi) Di C ++ ada banyak celah.
Semoga saya bisa membantu :-)
deported
. (baik dalam .inl atau .cpp untuk merujuk pada praktik penamaan file yang umum).