Вы можете ссылаться на переменные-члены класса внутри его функций-членов, просто называя их, например ::
.
void Date::add_day(int n)
{
d += n;
}
Здесь d
будет ссылаться на переменную-член int d
, которую вы объявили поверх своего фрагмента:
struct Date
{
int y, m, d;
// ...
}
Однако, вероятно, вас смущает затенение переменных-членов. Также обратите внимание, что у вас есть другие проблемы с дизайном и несколько способов улучшить ваш код. Взгляните на эту версию для вдохновения:
#include <iostream>
#include <stdexcept>
class Date
{
int year_, month_, day_;
public:
explicit Date(int year, int month, int day)
: year_(year), month_(month), day_(day)
{
if (month_ < 1 || month_ > 12)
throw std::logic_error("Invalid Month");
if (day_ < 1 || day_ > 31)
throw std::logic_error("Invalid Day");
}
void add_days(int days) { /* ... */ }
int year() const { return year_; }
int month() const { return month_; }
int day() const { return day_; }
};
std::ostream & operator<<(std::ostream & os, const Date & date)
{
return os << date.year() << '-' << date.month() << '-' << date.day();
}
int main()
{
Date date(1978, 6, 26);
date.add_days(1);
std::cout << date << '\n';
return 0;
}