'Khoảng trống ảo foo () = 0;' cú pháp không có nghĩa là bạn không thể triển khai foo () trong lớp hiện tại, bạn có thể. Nó cũng không có nghĩa là bạn phải thực hiện nó trong các lớp dẫn xuất . Trước khi bạn tát tôi, hãy quan sát vấn đề kim cương: (Mã ngầm định, để ý bạn).
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;
}
Bây giờ, lời gọi obj-> foo () sẽ dẫn đến B :: foo () và sau đó là C :: bar ().
Bạn thấy ... các phương thức ảo thuần túy không phải được triển khai trong các lớp dẫn xuất (foo () không có triển khai trong lớp C - trình biên dịch sẽ biên dịch) Trong C ++ có rất nhiều sơ hở.
Hy vọng tôi có thể giúp :-)
deported
. (trong một .inl hoặc .cpp để chỉ các thực hành đặt tên tệp phổ biến).