如果我的班级中有不同的属性,例如以下代码:
class Position
{
double latitude;
double longitude;
double altitude;
PosixTime time;
};
所以我们说这是我想要构建的类,其中time
(在当前开发时)总是当前时间。我目前不会使用任何其他时间,它始终是创作时间。我还应该使用时间参数实现构造函数吗?也许以后或其他开发人员使用它?总结了两个选项:
只编写2个构造函数:
Position()
: latitude(0)
, longitude(0)
, alitutde(0)
, time(PosixCurrentTime()) {}
Position(double lat, double lon, double alt)
: latitude(lat)
, longitude(lon)
, alitutde(alt)
, time(PosixCurrentTime()) {}
编写3个构造函数(从顶部和后面):
Position(double lat, double lon, double alt, PosixTime t)
: latitude(lat)
, longitude(lon)
, alitutde(alt)
, time(t) {}
答案 0 :(得分:2)
您只需要一个构造函数,其参数的默认值为。
Position(double lat = 0, double lon = 0, double alt = 0, PosixTime t = get_current_time())
: latitude(lat), longitude(lon), alitutde(alt), time(t)
{
}
请注意,在此示例中,get_current_time()
是函数的占位符,它返回当前时间。
答案 1 :(得分:2)
是否提供允许将time
设置为某个任意值的构造函数是您应根据类的语义做出的设计决策。考虑未来的用例,以及该功能是否有意义。如果你决定这样做,你可以将构造函数2和3合并为一个。
Position(double lat, double lon, double alt, PosixTime t = PosixCurrentTime())
: latitude(lat)
, longitude(lon)
, alitutde(alt)
, time(t) {}
如果您的编译器支持C ++ 11,请将该类定义为
class Position
{
double latitude = 0;
double longitude = 0;
double altitude = 0;
PosixTime time = PosixCurrentTime();
public:
Position() = default;
Position(double lat, double lon, double alt, PosixTime t = PosixCurrentTime())
: latitude(lat)
, longitude(lon)
, alitutde(alt)
, time(t) {}
};
答案 2 :(得分:0)
如果时间是(在当前开发时)总是当前时间,那么您只能声明一个get方法:
class Position {
public:
static Posixtime getCurrentTime() const;
private:
double latitude;
double longitude;
double altitude;
};
这是一个选项,否则您应该只有一个具有所有默认值的构造函数:
class Position {
public:
Position(const double& = 0, const double& = 0, const double& = 0, const PosixTime& = getCurrentTime())
};
Position::Position(const double& lat, const double& lon, const double& alt, const PosixTime& t) :
latitude(lat),
longitude(lon),
altitude(alt),
time(t) {
}