Tôi có một lớp cơ sởLớp trừu tượng C++ không có chức năng ảo thuần túy?
class ShapeF
{
public:
ShapeF();
virtual ~ShapeF();
inline void SetPosition(const Vector2& inPosition) { mPosition.Set(inPosition); }
protected:
Vector2 mPosition;
}
Rõ ràng với một số mã ommitied, nhưng bạn sẽ có được điểm. tôi sử dụng điều này như một mẫu, và với một số thú vị enums (Bỏ qua phần), một cách để xác định loại hình tôi đang sử dụng
class RotatedRectangleF : public ShapeF
{
public:
RotatedRectangleF();
virtual ~RotatedRectangleF();
protected:
float mWidth;
float mHeight;
float mRotation;
}
ShapeF làm công việc của mình với vị trí, và một enum định nghĩa những gì loại là. Nó có accessors và mutators, nhưng không có phương pháp.
Tôi có thể tạo cho ShapeF một lớp trừu tượng, để đảm bảo không ai cố gắng và khởi tạo một đối tượng thuộc loại ShapeF?
Thông thường, đây là doable bằng việc có một hàm ảo thuần tuý trong ShapeF
//ShapeF.h
virtual void Collides(const ShapeF& inShape) = 0;
Tuy nhiên, Tôi hiện đang làm việc với các va chạm trong một lớp riêng biệt. Tôi có thể di chuyển mọi thứ, nhưng tôi tự hỏi liệu có cách nào để tạo một lớp trừu tượng .. mà không có các hàm ảo thuần túy.
Bạn đang cố gắng thực hiện lại công văn động với gắn thẻ (enum) và truyền ... sẽ sớm trở thành cơn đau trong tương lai. Tôi sẽ xem xét lại thiết kế. –
@ DavidRodríguez-dribeas Tôi đã tìm ra đây là cách tiếp cận dễ nhất, static_casting mọi thứ. Nếu tôi muốn thiết kế lại, tôi sẽ loại bỏ ShapeF() hoàn toàn, với tất cả tính đa hình, và có mỗi hình dạng là người của chính nó. Trừ khi bạn có một đề nghị khác? – MintyAnt