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

C++: Constructors: Parent class parameters and setting values in new instance

本文关键字:父类 参数 设置 新实例 构造函数 实例 C++      更新时间:2023-10-16

我正在尝试使用继承创建一个日期和时间类。

父类 Date 具有变量月、日和年。

Date 派生类 DateTime 具有相同的变量,但添加了小时、分钟和秒。创建 DateTime 实例时,必须传递一个 Date 实例,并使用可选参数小时、分钟和秒。日期参数是必需的。如果未传递可选参数,则将应用默认值 0。

有没有更有效的方法来实现这一点?我觉得通过使用新 DateTime 实例的 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;
}

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

DateTime::DateTime(const Date& passDate, int hourSet = 0, int minuteSet = 0): 
    Date(passDate) {
  hour = hourSet;
  minute = minuteSet;
  second = 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

您需要在两个类中提供复制构造函数和赋值运算符,并正确验证输入值。

这样,您只需要为基础和派生实现 getter/setter。