Как установить конструктор по умолчанию при наличии более одного

0

Я узнаю о конструкторах в C++, и я понимаю, что вы можете объявить несколько конструкторов. Ниже вы можете видеть, что у меня есть два конструктора Date ниже, но я хочу установить Date(long) как значение по умолчанию. Может кто-нибудь объяснить, как я это сделаю?

Хорошо, поэтому, очевидно, этот вопрос имеет смысл. Я работаю над проблемой из книги, и вот что она говорит:

Измените программу 10.3, так что единственным членом данных класса является длинное целое число с именем yyyymmdd. Сделайте это, заменив объявление long yyyymmdd; для этих существующих заявлений:

int month; int day; int year;

Используя те же прототипы конструктора, которые в настоящее время объявлены в разделе объявления класса, перепишите их так, чтобы метод Date (long) стал конструктором по умолчанию, а метод Date (int, int, int) преобразует месяц, день и год в правильный формы для членов данных класса.

Программа 10.3:

#include <iostream>
#include <iomanip>
using namespace std;

class Date
{
    private:
        int month, day, year;
    public:
        Date(int=7, int=4, int=2012);
        Date(long);
        void showDate();
};

Date::Date(int mm, int dd, int yyyy)
{
   month = mm;
   day = dd;
   year = yyyy;
}

Date::Date(long yyyymmdd)
{
    year = int(yyyymmdd/10000);
    month = int( (yyyymmdd - year*10000)/100);
    day = int(yyyymmdd - year*10000 - month*100);
}

void Date::showDate()
{
    cout << "The date is "
         << setfill('0')
         << setw(2) << month << '/'
         << setw(2) << day << '/'
         << setw(2) << year % 100;
    cout << endl;
}

int main()
{
    Date a;
    Date b(4,1,1998);
    Date c = Date(20090515L);

    a.showDate();
    b.showDate();
    c.showDate();
    return 0;
}
  • 0
    Что такое конструктор по умолчанию?
  • 2
    Это не имеет смысла. Компилятор выбирает, какой конструктор вызывать в зависимости от того, какие аргументы вы указали. Что бы указывал «конструктор по умолчанию»?
Показать ещё 6 комментариев
Теги:
class
constructor

2 ответа

3

Значения по умолчанию для конструктора month/day/year, которые вы сделали его конструктором по умолчанию (вы можете назвать его без параметров. То, что вы хотите сделать, это не по умолчанию, и по умолчанию параметр для long конструктора:

    Date(int, int, int);
    Date(long = 20120704);
  • 0
    Спасибо Марк. На этот раз я фактически поставил прямой вопрос из книги, над которой я работаю. Это изменит ваш ответ?
1

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

Он автоматически используется, если вы не задаете (или не можете) аргументы при создании объекта.

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

Date dates[5]; // Will create 5 Dates using Date::Date(7, 4, 2012)
  • 0
    Спасибо @king_nak. На этот раз я фактически поставил прямой вопрос из книги, над которой я работаю. Это изменит ваш ответ?
  • 0
    Ну, тогда ответ Марка Б правильный. конструктор должен вызываться без аргументов. Это означает, что long -c'tor должен иметь параметры по умолчанию. Примечание : вызываемый без аргументов не обязательно означает, что он не может иметь аргументов; ему просто нужны параметры по умолчанию для всех из них!

Ещё вопросы

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