我想从更有经验的程序员那里得到一些意见。我的结构如下:
struct Position {
int x;
int y;
};
但我需要在如下结构中存储经度,例如:
struct Longitude {
int from;
int to;
};
它们实际上具有不同的名称相同,但x
和y
在Longitude
的情况下具有误导性。你会使用一些typedef Position Longitude
而不是定义Longitude
结构(但那时我们有x / y ......)?或者使用其他名称创建相同的冗余结构?或者还有其他选择?
答案 0 :(得分:5)
我倾向于将它们分开。
在C++
中,struct
和class
是相同的结构(除了成员变量和函数的默认访问权限)。
随着应用程序的发展,您可能希望向struct
添加更多功能和成员数据。那时两个定义将开始分歧。将它们从一开始就分开将有助于这种发展。
如果您担心代码重复,那么您始终可以从基础class
或struct
继承。
答案 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东西,但我真的没有看到使用它们的麻烦。)