c++ - 拥有大量重载的类构造函数是否被认为是不好的编程实践?

标签 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);

等等。等等。有更好的方法吗?

最佳答案

您可以:

  • 创建对象(一个有效的对象),然后通过接口(interface) setter 设置其属性(因为对象似乎可以具有可变数量的属性,这似乎是一个不错的选择)

  • 使用默认参数,例如

    Appointment(Date=getDefaultDate(),
                Date=getDefaultDate(),
                std::string=getDefaultString(),
                std::string=getDefaultString(),
                Contact=getDefaultContact());
    

这实际上归结为您喜欢如何处理和初始化对象。

一个重要的旁注:在大型生产代码库中,默认参数是一个经常不受欢迎的 C++ 功能,因为它可能会妨碍可读性和/或在特定场景中使调试变得更加困难(特别是当发生不需要的事情并且您没有考虑选择默认参数,默认参数are specified on the declaration,这也可能向开发人员“隐藏”潜在问题)

关于c++ - 拥有大量重载的类构造函数是否被认为是不好的编程实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26049126/

相关文章:

Java 从泛型 Class 对象获取方法

java - 如何创建带有内置变量的 Java 类

swift - 使用相同的参数但不同的外部标识符重载 swift 方法

c++ - 合并排序无法在 N logN 中工作

c++ - 一个类在 C++ 中只包含(默认情况下)私有(private)成员有什么用处?

c++ - 简化 const 重载?

c++ - 为什么 std::sort 找不到合适的(静态成员)函数重载?

c++ - Main 只接收参数的首字母

c++ - std::vector push_back 上的段错误/"Vector is not dereferencable"

c++ - ldap_search 函数成功。但是 ldap_count_entries 给出零(0)?