C++:构造函数:新实例中的父类参数和设置值
C++: Constructors: Parent class parameters and setting values in new instance
我正在尝试使用继承创建一个日期和时间类。
父类 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=0
、minuteSet
或secondSet
参数,它们将自动替换为 0
。
您需要在两个类中提供复制构造函数和赋值运算符,并正确验证输入值。
这样,您只需要为基础和派生实现 getter/setter。
相关文章:
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 从父类方法返回子类对象
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 将父类对象强制转换为子类的问题
- 在运行时选择父类的实现
- 如何在C++子类中访问父类的私有变量
- 将父类的子类的数据复制到具有相同父类的另一个类
- 父类的私有函数会导致对具有相同名称和相似参数的子类中的公共函数的不明确调用
- C++ 将子类的对象添加到父类的向量中
- 两个父类的构造函数的序列
- 为什么我的子类不继承父类的字符串?
- 构造函数将父类作为参数
- 如何将派生类作为函数参数传递:如果派生类成员不在父类中怎么办
- 将参数传递给函数,获取父类参数,而不将参数强制转换为父类
- 通过调用两个参数化的父类构造函数来构造继承的类
- 为什么子类覆盖虚拟函数不能更改父类的默认函数参数
- 无法通过可变参数函数将函数指针传递给父类中的方法--编译器错误?
- C++:构造函数:新实例中的父类参数和设置值
- 为什么派生类对象在没有参数的情况下自动调用父类构造函数
- c++将各种参数传递给父类构造函数(线程c++11)