结构冗余

时间:2013-12-30 10:27:12

标签: c++

我想从更有经验的程序员那里得到一些意见。我的结构如下:

struct Position {
    int x;
    int y;
};

但我需要在如下结构中存储经度,例如:

struct Longitude {
    int from;
    int to;
};

它们实际上具有不同的名称相同,但xyLongitude的情况下具有误导性。你会使用一些typedef Position Longitude而不是定义Longitude结构(但那时我们有x / y ......)?或者使用其他名称创建相同的冗余结构?或者还有其他选择?

4 个答案:

答案 0 :(得分:5)

我倾向于将它们分开。

C++中,structclass是相同的结构(除了成员变量和函数的默认访问权限)。

随着应用程序的发展,您可能希望向struct添加更多功能和成员数据。那时两个定义将开始分歧。将它们从一开始就分开将有助于这种发展。

如果您担心代码重复,那么您始终可以从基础classstruct继承。

答案 1 :(得分:0)

我认为,如果可行,我会将其内部存储为x/y from/to,并提供公开的转换界面。

答案 2 :(得分:0)

我会使经度的位置类父级和用户的getter和setter改为裸属性:

class Position {
public:
    int getX() { return x; }
    int getY() { return x; }
    void setX(int x) { this->x = x; }
    void setY(int y) { this->y = y; } 
protected:
    int x;
    int y;
};

class  Longitude : public Position  {
public:
    int getFrom() { return getX(); }
    int getTo() { return getY(); }
    void setFrom(int from) { setX(from); }
    void setTo(int y) { setY(to); } 
}

答案 3 :(得分:0)

这个怎么样?

struct Position {
    int x;
    int y;
};

using Longitude = Position;

c ++ 11提供了这样的糖sintax,你有与其他名称相同的数据(你仍然有相同的x / y东西,但我真的没有看到使用它们的麻烦。)