C ++: Конструкторы: параметры родительского класса и установка значений в новом экземпляре

0

Я пытаюсь создать класс даты и времени, используя наследование.

Родительский класс 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;
}
  • 0
    Для этого вам необходимо иметь конструктор копирования и оператор присваивания.
  • 1
    Есть ли в классе Date конструктор копирования?
Теги:
inheritance

3 ответа

1

Вы можете вызвать конструктор родительского класса и значения параметров по умолчанию, чтобы сделать код намного более кратким:

DateTime::DateTime(const Date& passDate, int hourSet = 0, int minuteSet = 0): 
    Date(passDate) {
  hour = hourSet;
  minute = minuteSet;
  second = 0;
}
  • 0
    Не забудьте определить конструктор копирования Date
  • 0
    @VadimProzorov Да, это работает, только если существует конструктор копирования. Из вопроса не ясно, так ли это на самом деле или нет.
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.

0

Вам необходимо предоставить экземпляр-конструктор и оператор присваивания в обоих классах с правильной проверкой входных значений.

При этом вам просто нужно реализовать геттеры/сеттеры как для базовой, так и для производной.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню