vì một lý do nào đó tôi đang suy nghĩ về việc triển khai giao diện trong một hàm (phương thức) nào đó làm lớp địa phương.Triển khai lớp trừu tượng thành lớp địa phương? ưu và khuyết điểm
xem xét sau đây:
class A{
public:
virtual void MethodToOverride() = 0;
};
A * GetPtrToAImplementation(){
class B : public A {
public:
B(){}
~B(){}
void MethodToOverride() {
//do something
}
};
return static_cast<A *>(new B());
}
int _tmain(int argc, _TCHAR* argv[])
{
A * aInst = GetPtrToAImplementation();
aInst->MethodToOverride();
delete aInst;
return 0;
}
những lý do tại sao tôi đang làm điều này là:
- Tôi lười biếng để thực hiện lớp (B) trong tập tin riêng biệt
- MethodToOverride chỉ các đại biểu gọi đến lớp khác
- Lớp B không được hiển thị cho người dùng khác
- không cần phải lo lắng ab xóa aIn vì các con trỏ thông minh được sử dụng để triển khai thực tế
Vì vậy, câu hỏi của tôi là nếu tôi làm điều này đúng không?
Cảm ơn trước!
Tại sao bạn không thể xác định 'B' hoàn toàn (không phải cục bộ) trong tệp triển khai cho' A'? –
Chỉ cần một nitpick, nhưng A nên có một destructor ảo – jpalecek
A chỉ là một giao diện - khai báo trong một tập tin tiêu đề. Ngoài ra, B không thể hiển thị bên ngoài đơn vị dịch mà GetPtrToAImplementation được định nghĩa. – sinek