gpt4 book ai didi

C++:组合接口(interface)

转载 作者:搜寻专家 更新时间:2023-10-31 00:05:36 25 4
gpt4 key购买 nike

所以我花了一些时间思考这个问题,并在谷歌上到处寻找“解决方案”(解决方案很可能是一个偏好问题,但我不确定这一点)。下面是我遇到的问题,但是这个问题可以应用于很多关于合成的情况。

我有一个类,颜色,包含红色、绿色、蓝色和 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++ 比较陌生,所以我愿意学习!那么问题来了,我应该使用前一种方法,后一种方法,还是完全不同的方法?

最佳答案

不是直接回答你的问题,但我会去掉所有的 setter(在任何情况下通常是一个不好的迹象),并使用构造函数:

Color c = Color( 123, 17, 77 );

其中三个构造函数参数是 RGB 值。

关于C++:组合接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2001725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com