我有一个自定义形状类,这里的问题已简化,如下所示:
class Shape : public SpriteProperties{
};
类SpriteProperties是:
class SpriteProperties{
Point rotationPivotPoint;
Point rotationPivtoAxes;
float width, height, xPos, yPos, zPos;
Point color;
};
在用户代码中,当用户初始化形状时,他使用以下原型的功能。函数中的参数是要表示的任何形状的必需属性。
void init(float _x, float _y, float _w, float _h, Point* _color)
{
//Initialize the shape
}
但是,我的形状还有其他属性,例如旋转轴点和轴,用户应该在此初始化过程中以某种方式指定,并且这些旋转属性可能/可能不会在以后用于用户,具体取决于他是如何使用这门课的。
void prepareRotationParams(Point* _rotationPivot, Point* _rotationAxes)
{
//
}
我的问题:
我正在考虑限制用户使用这个准备旋转函数,这可能会在代码的后期使用,同时我不想在init
函数本身中给出准备旋转参数,因为这些属性不符合用户为任何形状明确指定must
的核心属性。什么是理想的方法?
答案 0 :(得分:1)
使用默认参数:
void init(float _x, float _y, float _w, float _h, Point* _color, Point* rPivot=0, Point *rAxes=0)
{
//Initialize the shape
if (rPivot && rAxes) {
prepareRotationParams(rPivot, rAxes);
}
}
答案 1 :(得分:0)
首先,考虑在构造函数中传入参数。当然,这有时是不可能的。
第二,旋转参数一旦设定是不变的,还是可以多次设定?如果它们只能设置一次并且不支持设置两次,请重新考虑您的设计,因为您基本上有3个初始化函数(constructor
,init
,prepareRotationParams
),这使得它很容易让用户意外使用部分初始化的对象。
不要使用3个初始化函数,而应考虑构建器模式。 http://en.wikipedia.org/wiki/Builder_pattern