初始化列表:来自基类的构造函数和成员函数

时间:2014-01-16 10:45:11

标签: c++ list constructor explicit

所以我想做的是

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

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

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){
}

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

如何在子类构造函数的初始化列表中显式初始化'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)

由于

3 个答案:

答案 0 :(得分:1)

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

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(...), ...初始化列表,其目的是初始化类的成员对象。

答案 1 :(得分:0)

应以逗号分隔

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)

答案 2 :(得分:0)

如果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只有一个(约会) - 组合 - 并且我可以看到约会有一个(日期) - 组合 - 那么每日构造函数应该是这样的

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

并且Appoiintment参数化构造函数将调用Date参数化构造函数