основная задача добавить данные введенные с клавиатуры через сеттер вопрос можно ли реализовать подобное не добавляя переменную. Сейчас это работает так:
int day;
cin >> day;
setDate("day", day);
setDate выглядит так:
void date::setDate(string Variable, int set)
{if (Variable == "День" || Variable == "день" || Variable == "day"){day = set;}}
хотелось бы вот так:
cin >> setter(day)
или что-то похожее без добавления дополнительной переменной
Из вашей формулировки вопроса не ясно, что именно вы пытаетесь сделать. Но мои телепатические способности подсказывают мне, что, возможно, вы пытаетесь реализовать что-то вроде манипуляторов ввода
#include <iostream>
class date
{
public:
class day_proxy
{
public:
day_proxy(date &d) : day(d.day) {}
friend std::istream &operator >>(std::istream &str, const day_proxy &p) { return str >> p.day; }
private:
int &day;
};
class month_proxy
{
public:
month_proxy(date &d) : month(d.month) {}
friend std::istream &operator >>(std::istream &str, const month_proxy &p) { return str >> p.month; }
private:
int &month;
};
class year_proxy
{
public:
year_proxy(date &d) : year(d.year) {}
friend std::istream &operator >>(std::istream &str, const year_proxy &p) { return str >> p.year; }
private:
int &year;
};
friend std::ostream &operator <<(std::ostream &str, const date &d)
{
return str << d.day << ":" << d.month << ":" << d.year;
}
private:
int day, month, year;
};
date::day_proxy day_setter(date &d) { return d; }
date::month_proxy month_setter(date &d) { return d; }
date::year_proxy year_setter(date &d) { return d; }
int main()
{
date d;
std::cin >> day_setter(d) >> month_setter(d) >> year_setter(d);
std::cout << d << std::endl;
}
Как несложно видеть, здесь много повторяющегося кода, который легко свернуть в шаблоны. Но ради наглядности я не стал этого делать.
В данном случае формально можно было и обойтись без этих прокси-классов, а просто возвращать из day_setter
ссылку int &
на поле d.day
. Однако это сделало бы ввод бесконтрольным. А в вышеприведенном варианте контроль правильности ввода может быть реализован внутри соответствущих методов прокси-классов.
Нужно для класса date
переопределить оператор >>
class date {
.........
friend istream& operator>>(istream& is, date& dt);
}
istream& operator>>(istream& is, date& dt)
{
is >> dt.day
return is;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как отключить/включить скринсавер в Win10 ? Стандартные способы опробованные ниже не работают:
Программа которая заменяет каждую букву в тексте на букву которая идет после нее в алфавите через n символовПри компиляции выдает ошибку...
При вызове метода about(); на любом обьекте ничего не происходит только завершаеться программаХотя метод fiiling(); работает корректно