Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:构造函数:新实例中的父类参数和设置值_C++_Inheritance - Fatal编程技术网

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

C++ C++;:构造函数:新实例中的父类参数和设置值,c++,inheritance,C++,Inheritance,我正在尝试使用继承创建日期和时间类 父类Date具有变量month、day和year 日期派生类DateTime具有相同的变量,但添加了小时、分钟和秒。DateTime实例在创建时必须传递一个日期实例,并带有可选参数hour、minute和second。日期参数是一项要求。如果未传递可选参数,将应用默认值0 有没有更有效的方法来实现这一点?我觉得通过使用Date实例中的函数为新的DateTime实例检索参数来重新设置参数是很乏味的 DateTime::DateTime(Date passDate

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

父类Date具有变量month、day和year

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

有没有更有效的方法来实现这一点?我觉得通过使用Date实例中的函数为新的DateTime实例检索参数来重新设置参数是很乏味的

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(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=0
minuteSet
secondSet
参数中的任何一个,它们将自动替换为
0
,您可以调用父类构造函数和默认参数值,使代码更加简洁:

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

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


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

您应该定义一个复制构造函数和赋值运算符,以更轻松地实现这一点。
Date
class是否有一个复制构造函数?不要忘记定义
Date
copyconstructor@VadimProzorov是的,它仅在复制构造函数存在时工作。从这个问题上看,情况是否如此还不清楚。