类中的强制初始化函数

时间:2012-12-13 06:28:21

标签: c++ oop

我有一个自定义形状类,这里的问题已简化,如下所示:

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的核心属性。什么是理想的方法?

2 个答案:

答案 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个初始化函数(constructorinitprepareRotationParams),这使得它很容易让用户意外使用部分初始化的对象。

不要使用3个初始化函数,而应考虑构建器模式。 http://en.wikipedia.org/wiki/Builder_pattern