Фрагмент кода такой:
Код: Выделить всё
Date& Date::add_year(int n) {
if (d == 29 && m == 2 && !leapyear(y + n)) { // beware of February 29
d = 1;
m = 3;
}
y += n;
return *this;
}
Ссылка на книгу здесь:
https ://chenweixiang.github.io/docs/The_C++_Programming_Language_4th_Edition_Bjarne_Stroustrup.pdf
16.2.10 Самостоятельная ссылка
Функции обновления состояния add_year(), add_month() и add_day() (§16.2.3) были определены так, чтобы не возвращать значения. Для такого набора связанных функций обновления часто бывает полезно вернуть ссылку на обновленный объект, чтобы операции можно было объединить в цепочку. Например, мы хотели бы написать:
Код: Выделить всё
void f(Date& d)
{
//...
d.add_day(1).add_month(1).add_year(1);
//...
}
Код: Выделить всё
class Date {
//...
Section 16.2.10 Self-Reference 465
Date& add_year(int n); // add n years
Date& add_month(int n); // add n months
Date& add_day(int n); // add n days
};
Код: Выделить всё
static
вызвана, и может явно ссылаться на него. Например:
Код: Выделить всё
Date& Date::add_year(int n) {
if (d==29 && m==2 && !leapyear(y+n)) { // beware of February 29
d = 1;
m = 3;
}
y += n;
return *this;
}
В не-
Код: Выделить всё
static
Код: Выделить всё
const
Большинство случаев использования неявны. В частности, каждая ссылка на не-
Код: Выделить всё
staticЧлен
Код: Выделить всё
Date& Date::add_year(int n) {
if (this−>d==29 && this−>m==2 && !leapyear(this−>y+n)) {
this−>d = 1;
this−>m = 3;
}
this−>y += n;
return *this;
}
Код: Выделить всё
struct Link {
Link* pre;
Link* suc;
int data;
Link* insert(int x) // insert x before this
{
return pre = new Link{pre,this,x};
}
void remove() // remove and destroy this
{
if (pre) pre−>suc = suc;
if (suc) suc−>pre = pre;
delete this;
}
//...
};
Единственное, что я мог придумать, это то, что что-то может быть не так с возвратом *this, думая, что могут возникнуть проблемы с его неявным, а не явным использованием для нестатической и неконстантной функции-члена, но, честно говоря, я здесь немного запутался.
Подробнее здесь: https://stackoverflow.com/questions/783 ... oustrups-c