我正在用c ++制作一个日历应用程序,并且我根据提供的信息为约会类制作了大量重载的构造函数(例如,如果我有一个事件的开始时间但没有结束时间,地点,但没有附加联系人)
class Appointment {
public:
//overloaded Constructors
Appointment();
Appointment(Date);
Appointment(Date,Date);
Appointment(Date,Date,std::string);
Appointment(Date,Date,std::string,std::string);
Appointment(Date,Date,std::string,std::string,Contact);
等。有更好的方法吗?
答案 0 :(得分:3)
你可以:
创建对象(一个有效的对象),然后通过接口设置器设置其属性(因为看起来一个对象可以有一个可变数量的属性,这似乎是一个不错的选择)
使用默认参数,例如
Appointment(Date=getDefaultDate(),
Date=getDefaultDate(),
std::string=getDefaultString(),
std::string=getDefaultString(),
Contact=getDefaultContact());
它实际上归结为您更喜欢处理和初始化对象。
一个重要的旁注:在大型生产代码库中,默认参数是一个经常不赞成的C ++特性,因为它可能会阻碍可读性和/或在特定情况下使调试变得更加困难(特别是当不需要的东西继续发生时您没有考虑选择默认参数,默认参数are specified on the declaration,这也可能“隐藏”开发人员的潜在问题)
答案 1 :(得分:0)
这完全没必要。正如宏A所指出的,您可以默认构造对象,然后可以使用setter。
在设计软件时,还应该记住完整和最小的规则,即应该提供类中的所有设施,以避免重复/冗余。