这个类有什么错误了?
class ShapeCollection;
extern ShapeCollection g_Shapes;
class Shape
{
public:
Shape() //--构造
{
g_Shapes.Add(this);
}
virtual ~Shape() //--虚析构
{
Dispose();
}
private:voidDispose()
{
FreeResources();
g_Shapes.Remove(this);
}
virtual void FreeResources() = 0;
};
class Rectangle: public Shape
{
int left, top, right, bottom;
public:
Rectangle()
{
memset(this, 0, sizeof(this));
}
private:
void FreeResources() {}
};
[解决办法]
不方便看,我先帮你整理一下
class ShapeCollection; extern ShapeCollection g_Shapes; class Shape { public: Shape() //--构造 { g_Shapes.Add(this); } virtual ~Shape() //--虚析构 { Dispose(); } private: void Dispose() { FreeResources(); g_Shapes.Remove(this); } virtual void FreeResources() = 0; }; class Rectangle: public Shape { int left, top, right, bottom; public: Rectangle() { memset(this, 0, sizeof(this)); } private: void FreeResources() {} };
[解决办法]
class ShapeCollection; 是什么,你要像g_Shapes.Add(this); 这样使用它的函数就不能只是声明这个类型就可以的了,必须include 到它的 定义
[解决办法]
virtual void FreeResources() = 0;
基类的纯虚函数在派生类中没有提供实现.
[解决办法]
类本就应该是一个独立的封装。
可是你这里的class shape 中操作的是一个全局的 g_Shapes,
显然封装性很不好。
可以把这个 g_Shapes 放到 shape 里面去。
从代码看,应该是基于引用计数的思想,楼主可以看看这个方面的实现、方法。