Я узнаю о конструкторах в 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;
}
Значения по умолчанию для конструктора month/day/year, которые вы сделали его конструктором по умолчанию (вы можете назвать его без параметров. То, что вы хотите сделать, это не по умолчанию, и по умолчанию параметр для long
конструктора:
Date(int, int, int);
Date(long = 20120704);
Вы не можете установить конструктор по умолчанию. По определению конструктор по умолчанию является конструктором, который может быть вызван без аргументов.
Он автоматически используется, если вы не задаете (или не можете) аргументы при создании объекта.
Например, если вы определяете массив объектов, все эти объекты будут построены с использованием конструктора по умолчанию:
Date dates[5]; // Will create 5 Dates using Date::Date(7, 4, 2012)
long
-c'tor должен иметь параметры по умолчанию. Примечание : вызываемый без аргументов не обязательно означает, что он не может иметь аргументов; ему просто нужны параметры по умолчанию для всех из них!