读书人

这个类有什么东东了

发布时间: 2012-02-24 16:30:38 作者: rapoo

这个类有什么错误了?
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() {}
};


[解决办法]
不方便看,我先帮你整理一下

C/C++ code
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 里面去。
从代码看,应该是基于引用计数的思想,楼主可以看看这个方面的实现、方法。

读书人网 >C++

热点推荐