有时在课堂设计中我遇到了班级组织的问题。例如,我有一个Shape
类,它是所有类型形状的抽象基类:矩形,多边形,圆形等:
Shape.h
:
#pragma
class Rectangle;
class Shape {
public:
Shape();
...
virtual Rectangle boundingRectangle() const = 0;
};
我有一个来自Rectangle
的{{1}}类:
Shape
:
Rectangle.h
使用此类方法的明显问题是我无法在#pragma once
#include "Shape.h"
class Rectangle : public Shape {
public:
Rectangle();
...
Rectangle boundingRectangle() const;
};
中转发声明Rectangle
。我知道的唯一解决方案是在Shape.h
Rectangle
和Shape
包含Shape.h
之后立即声明Rectangle.h
(例如,请参阅QGeoShape和QGeoRectangle {{3} })。
当你需要在Shape.h
类声明中使用从Shape
继承的几个类(例如virtual Circle Shape::boundingCircle() const
)时,上面的解决方案有一些缺点。也许有人知道另一种解决方案?