C ++:构造函数:新实例中的父类参数和设置值

时间:2014-11-13 07:59:44

标签: c++ inheritance

我试图使用继承创建日期和时间类。

父类Date有月,日和年变量。

Date派生类DateTime具有相同的变量,但添加了小时,分钟和秒。 DateTime实例在创建时必须传递Date实例,并带有可选参数hour,minute和second。 Date参数是一项要求。如果未传递可选参数,则将应用默认值0。

有更有效的方法来实现这个吗?我觉得通过使用Date实例中的函数检索新参数来重新设置参数是很繁琐的。

DateTime::DateTime(Date passDate){
  day = passDate.getDay();
  month = passDate.getMonth();
  year = passDate.getYear();
  hour = 0;
  minute = 0;
  second = 0;
}

DateTime::DateTime(Date passDate, int hourSet){
  day = passDate.getDay();
  month = passDate.getMonth();
  year = passDate.getYear();
  hour = hourSet;
  minute = 0;
  second = 0;
}

DateTime::DateTime(Date passDate, int hourSet, int minuteSet){
  day = passDate.getDay();
  month = passDate.getMonth();
  year = passDate.getYear();
  hour = hourSet;
  minute = minuteSet;
  second = 0;
}

3 个答案:

答案 0 :(得分:1)

您可以调用父类构造函数和默认参数值,以使代码更简洁:

DateTime::DateTime(const Date& passDate, int hourSet = 0, int minuteSet = 0): 
    Date(passDate) {
  hour = hourSet;
  minute = minuteSet;
  second = 0;
}

答案 1 :(得分:0)

您可以使用默认构造函数参数以获得单个构造函数。

DateTime::DateTime(Date passDate, int hourSet=0, int minuteSet=0, int secondSet=0) {
  day = passDate.getDay();
  month = passDate.getMonth();
  year = passDate.getYear();
  hour = hourSet;
  minute = minuteSet;
  second = secondSet;
}

如果省略任何hourSet=0minuteSetsecondSet参数,它们将自动替换为0

答案 2 :(得分:0)

您需要在两个类中提供复制构造函数和赋值运算符,并对输入值进行适当的验证。

有了这个,你只需要为base和derived实现getter / setter。