
Сообщение от
Nixy
а можешь пояснить в чем былокод, на твой взгляд, при обеспечении доступа к некоторым полям класса, с помошью getteroв\setterов
Полагаю, он имел в виду не геттеры, а такие "необходимые" члены класса
C++ |
1
2
3
4
5
6
7
| void Point::Input(){//Как так? Все классы просто обязаны уметь управляться с вводом/выводом!
std::cout<<"input point";
std::cin>>x>>y;
}
void Point::Output(){
std::cout<<x<<y;
} |
|
Обрати внимание на формулировку вопроса:
Определить в этом классе функции-члены, которые
1)обеспечивают ввод/вывод элементов класса,
2) а также доступ к закрытым членам класса.
То есть имелись в виду: Первое - нормальные гет/сеттеры
Второе - именно вышеприведённые быдлофункции.
В последнее время вижу всё больше быдлокодо-заданий, требующих это. От таких заданий, у учеников создаётся впечатление, что чуть ли не каждый класс должен уметь выводить себя в консоль.
Недостатки подхода очевидны: - класс становится привязанным к нюансам реализации ввода-вывода.
- Если изменить в приложении модуль ввода-вывода, придётся переписывать все классы.
- Дублируется код присвоения значений полям класса.
- Класс становится привязанным к использованию в консольных приложениях.
- классу позволяется проявить инициативу и самостоятельно залезть на экран
Короче, полное нарушение принципа "разделяй и влавствуй".
В нормальной архитектуре сам пользователь класса определяет, откуда взять данные для записи класс, а затем вызывает у него сеттер. Например,
C++ |
1
2
3
4
| void Manager::init_Points(){
thePoint.setX(Input_manager.getInteger());
thePoint.setY(Input_manager.getInteger());
} |
|
Естественно в учебных примерах такой overengineering не нужен. Но суть не меняется. В твоём примере консольного приложения этим должна заниматься функция main (или ещё какая).
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| /* НЕ ВЕРНО
int main(){
Point thePoint;
MyPoint.Input();
MyPoint.Output();
}*/
//ВЕРНО
int main(){
int x, y;
Point thePoint;
cout<<"Введи x y";
cin>>x>>y;
thePoint.setX(x);
thePoint.setY(y);
cout<<thePoint.getX()<<" "<<thePoint.getY();
return 0;
} |
|