Tôi có một lớp giao diện tương tự như:Cách tốt nhất để sử dụng C++ Interface
class IInterface
{
public:
virtual ~IInterface() {}
virtual methodA() = 0;
virtual methodB() = 0;
};
sau đó tôi thực hiện các giao diện:
class AImplementation : public IInterface
{
// etc... implementation here
}
Khi tôi sử dụng giao diện trong một ứng dụng là nó tốt hơn để tạo một thể hiện của lớp AImplementation cụ thể. Ví dụ.
int main()
{
AImplementation* ai = new AIImplementation();
}
Hoặc là nó tốt hơn để đặt một nhà máy "tạo ra" chức năng thành viên trong giao diện như sau:
class IInterface
{
public:
virtual ~IInterface() {}
static std::tr1::shared_ptr<IInterface> create(); // implementation in .cpp
virtual methodA() = 0;
virtual methodB() = 0;
};
Sau đó, tôi sẽ có thể sử dụng giao diện trong chính như sau:
int main()
{
std::tr1::shared_ptr<IInterface> test(IInterface::create());
}
Tùy chọn thứ nhất có vẻ là thực tế phổ biến (không phải để nói đúng). Tuy nhiên, tùy chọn thứ 2 có nguồn gốc từ "Hiệu quả C++".
Chỉ cần một vài ghi chú cho tính đúng đắn của ngôn ngữ: trong C++ không có phương pháp, có các hàm thành viên. – Artyom
Tôi sẽ viết main() như sau: 'int main() { IInterface * i = new AIImplementation(); } ' –