拥有大量重载类构造函数被认为是错误的编程习惯吗?

时间:2014-09-25 22:23:38

标签: c++ class overloading

我正在用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);

等。有更好的方法吗?

2 个答案:

答案 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。

在设计软件时,还应该记住完整和最小的规则,即应该提供类中的所有设施,以避免重复/冗余。