Программирование. Принципы и практика использования C++ Исправленное издание, стр. 134
return dd;}Здесь использовано ключевое слово
staticdddefault_date()default_date()default_date()DateDate::Date() :y(default_date().year()), m(default_date().month()), d(default_date().day())}Обратите внимание на то, что конструктор по умолчанию не обязан проверять значение, заданное по умолчанию; конструктор, создавший объект, вызвавший функцию
default_dateDateDatevector<Date> birthdays(10);Без конструктора по умолчанию мы были бы вынуждены сделать это явно.
vector<Date> birthdays(10,default_date());9.7.4. Константные функции-члены
Некоторые переменные должны изменяться, потому они так и называются, а некоторые — нет; иначе говоря, существуют переменные, которые не изменяются. Обычно их называют константами, и для них используется ключевое слово
constvoid some_function(Date& d, const Date& start_of_term){ int a = d.day(); // OK int b = start_of_term.day(); // должно бы правильно (почему ?) d.add_day(3); // отлично start_of_term.add_day(3); // ошибка}Здесь подразумевается, что переменная
dstart_of_termsome_function()start_of_termstart_of_termconstday()daystart_of_termDatestart_of_term.day()day()Dateday()Date
class Date {public: // ... int day() const; // константный член: не может изменять // объект Month month() const; // константный член: не может изменять // объект int year() const; // константный член: не может изменять // объект void add_day(int n); // неконстантный член: может изменять // объект void add_month(int n); // неконстантный член: может изменять // объект void add_year(int n); // неконстантный член: может изменять // объектprivate: int y; // год Month m; int d; // день месяца};Date d(2000, Date::jan, 20);const Date cd(2001, Date::feb, 21);cout << d.day() << " — " << cd.day() << endl; // OKd.add_day(1); // OKcd.add_day(1); // ошибка: cd — константаКлючевое слово
constint Date::day() const{ ++d; // ошибка: попытка изменить объект в константной // функции - члене return d;}Естественно, как правило, мы не собираемся мошенничать. В основном компилятор обеспечивает защиту от несчастных случаев, что очень полезно при разработке сложных программ.
9.7.5. Члены и вспомогательные функции