【发布时间】:2010-01-04 19:48:23
【问题描述】:
所以我花了一些时间思考这个问题,并在谷歌上到处寻找“解决方案”(解决方案很可能是一个偏好问题,但我对此不确定)。下面是我遇到的问题,但是这个问题可以应用于很多关于构图的情况。
我有一个类 Colour,其中包含 red、green、blue 和 alpha 的成员。它们中的每一个都有一个 set 和 get 成员函数。很简单。
class Colour
{
public:
float getRed();
void setRed(float);
float getGreen();
void setGreen(float);
...
private:
float red;
float green;
...
};
我将在其他类中使用这个类来指定它们的颜色,例如(为了简洁省略构造函数和析构函数):
class ColourableObject
{
private:
Colour colour;
};
现在我的问题是:这个 ColourableObject 类如何最好地访问这个 Color 对象?最好检索 Color 对象以直接访问其成员函数,如下所示:
class ColourableObject
{
public:
Colour& getColour();
private:
Colour colour;
};
或者,最好给 ColourableObject 类提供自己的集合并获取颜色函数,其中作用于 Color 对象,如下所示:
class ColourableObject
{
public:
float getRed();
void setRed(float);
...
private:
Colour colour;
};
对我来说,前者是最合乎逻辑的,因为它可以省去很多麻烦,只需直接作用于这个 Color 对象,就可以为每个需要这个 Color 对象的类添加功能。
但是,后者不是更容易受到 ColourableObject 类更改的影响吗?更不用说 colourableObject.getColour().setRed(x) 对我来说似乎不太自然,因为 get 和 set 相互冲突。
我可能完全有错误的方法。我对C++比较陌生,所以我愿意学习!那么问题来了,我应该使用前一种方法,后一种方法,还是完全不同的方法?
【问题讨论】:
-
你有没有想过,如果你为每个数据成员提供get/set方法,效果就是没有封装。您不妨一开始就将数据成员公开。
-
@jalf 除非他完全删除 Color 对象,并用其他东西替换它。也许他开始将所有内容存储在 CMYK 中,并在 setRed 中进行计算以生成适当的值。
标签: c++ class interface composition