Я пытаюсь создать класс даты и времени, используя наследование.
Родительский класс Date имеет переменные месяц, день и год.
Класс Date, DateTime, имеет одинаковые переменные, но с добавлением часа, минуты и секунды. Экземпляр DateTime при его создании должен быть передан экземпляром Date и с необязательными параметрами: час, минута и секунда. Параметр Date является обязательным. Если необязательные параметры не будут переданы, будут применены значения по умолчанию 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(const Date& passDate, int hourSet = 0, int minuteSet = 0):
Date(passDate) {
hour = hourSet;
minute = minuteSet;
second = 0;
}
Date
Вы можете использовать параметры конструктора по умолчанию, чтобы иметь один конструктор.
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
.
Вам необходимо предоставить экземпляр-конструктор и оператор присваивания в обоих классах с правильной проверкой входных значений.
При этом вам просто нужно реализовать геттеры/сеттеры как для базовой, так и для производной.
Date
конструктор копирования?