【问题标题】:initializer list: a constructor from the base class and a member function初始化列表:基类的构造函数和成员函数
【发布时间】:2014-01-16 10:45:11
【问题描述】:

所以我想做的是

用我的基类的构造函数初始化我的子类的构造函数。

这就是我的基类构造函数的样子。

Appointment::Appointment(string description, int month, int day, int year, int hour, int minute):date(month, day, year){
    this-> hour = hour;
    this-> minute =minute;
    this-> description = description;
}

这就是我的子类构造函数的样子

Daily::Daily(string description, int month, int day, int year, int hour, int minute) : Appointment(description, month, day, year, hour, minute){
}

^在我的子类的构造函数中(每天)有一个错误指出我需要显式初始化没有默认构造函数的成员“日期”。

如何在我的子类构造函数的初始化列表中显式初始化“日期”和“约会”?

看起来像这样吗?

Daily::Daily(string description, int month, int day, int year, int hour, int minute) : Appointment(description, month, day, year, hour, minute):Date(month, day, year)

谢谢

【问题讨论】:

标签: c++ list constructor explicit


【解决方案1】:

考虑到dateappointment,使用您发布的this other question,如下:

Date date;
Appointment appointment;

你可以使用这个构造函数语法:

Daily::Daily(string description, int month, int day, int year, int hour, int minute) : appointment(description, month, day, year, hour, minute), date(month, day, year) { ... }

通常在如下定义中:

A::A(...) : x(...), y(...), ... {...}

x(...), y(...), ... 是一个initializer-list,用于初始化类的成员对象。

【讨论】:

    【解决方案2】:

    应该用逗号分隔

    Daily::Daily(string description, int month, int day, int year, int hour, int minute) : Appointment(description, month, day, year, hour, minute), Date(month, day, year)
    

    【讨论】:

      【解决方案3】:

      如果 Daily 类有一个 (Date) 并且有一个 (Appointment) 这意味着它是一个组合,那么你必须使用如下所示的初始化列表

      Daily::Daily(string description, int month, int day, int year, int hour, int minute) :
         Appointment(description, month, day, year, hour, minute),
         Date(month, day, year) {}
      

      但是如果 Daily 有一个 (Appointment) only -composition- 并且我可以看到 Appointment 有一个 (Date) -composition- 那么 Daily 构造函数应该是这样的

      Daily::Daily(string description, int month, int day, int year, int hour, int minute) :
         Appointment(description, month, day, year, hour, minute) {}
      

      Appoiintment 参数化构造函数会调用 Date 参数化构造函数

      【讨论】:

        猜你喜欢
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-23
        相关资源
        最近更新 更多