Trong C++, có thể có một lớp cơ sở cộng với lớp dẫn xuất thực hiện một giao diện duy nhất không?C++: Nguồn gốc + Lớp cơ sở triển khai một giao diện đơn lẻ?
Ví dụ:
class Interface
{
public:
virtual void BaseFunction() = 0;
virtual void DerivedFunction() = 0;
};
class Base
{
public:
virtual void BaseFunction(){}
};
class Derived : public Base, public Interface
{
public:
void DerivedFunction(){}
};
void main()
{
Derived derived;
}
này sai vì nguồn gốc không thể được khởi tạo. Theo như trình biên dịch có liên quan Giao diện :: BaseFunction không bao giờ được xác định.
Cho đến nay các giải pháp duy nhất mà tôi đã tìm thấy sẽ được tuyên bố một đường chuyền thông qua chức năng trong nguồn gốc
class Derived : public Base, public Interface
{
public:
void DerivedFunction(){}
void BaseFunction(){ Base::BaseFunction(); }
};
Có giải pháp nào tốt hơn?
EDIT: Nếu vấn đề, đây là một vấn đề thế giới thực tôi đã sử dụng các hộp thoại MFC.
Tôi có một lớp hộp thoại (MyDialog cho phép nói) có nguồn gốc từ CDialog. Do các vấn đề phụ thuộc, tôi cần tạo một giao diện trừu tượng (MyDialogInterface). Lớp sử dụng MyDialogInterface cần sử dụng các phương thức cụ thể cho MyDialog, nhưng cũng cần gọi CDialog :: SetParent. Tôi chỉ giải quyết nó bằng cách tạo MyDialog :: SetParent và có nó đi qua để CDialog :: SetParent, nhưng đã tự hỏi nếu có một cách tốt hơn.
Nếu bạn làm theo cách đó, thì bạn không cần khai báo cơ sở thứ hai. – Torlack
Đó là những gì anh ấy viết. Tôi không muốn thay đổi nó. Ông có thể có lý do để di chuyển nó như vậy –
tôi đã thực hiện một bình luận về điều đó. cảm ơn :) –