0 / 0 / 1
Регистрация: 01.01.2017
Сообщений: 20
|
||||||
1 | ||||||
ООП С++: Построить класс для работы со строками ФИО03.05.2018, 17:30. Показов 3618. Ответов 13
Выполняю задание: Построить класс для работы со строками ФИО, включить функции для:
1) Ввода данных в строку; 2) Вывода данных; 3) Вывода данных - только инициалы; 4) Смена имени/фамилии. Посмотрите пожалуйста на то что я накодил, не знаю правильно ли все сделал. Например, из уроков видел что в классе нужен конструктор, создал его, но не понимаю его необходимость здесь. С функциями вроде проблем не возникло? Прокомментируйте пожалуйста работу. Спасибо!
0
|
03.05.2018, 17:30 | |
Ответы с готовыми решениями:
13
Реализуйте класс для хранения ФИО и номера телефона человека, класс для хранения даты рождения человека, а также класс для хранения ФИО и почтового ад Класс для работы сo строками Класс для работы сo строками Класс для работы со строками |
0 / 0 / 1
Регистрация: 01.01.2017
Сообщений: 20
|
|
07.05.2018, 16:08 [ТС] | 2 |
Вопрос актуален
0
|
621 / 941 / 150
Регистрация: 10.08.2015
Сообщений: 5,018
|
|
07.05.2018, 16:38 | 3 |
бред сумасшедшего...
реализация бреда сумасшедшего... вас хайпят, молодой человек, недалекие люди, возомнившие себя преподами. Ибо вот это вот - прямое нарушение принципов ООП. Это чистой воды процедурщина.
0
|
133 / 53 / 43
Регистрация: 09.05.2015
Сообщений: 565
|
|
07.05.2018, 16:50 | 4 |
В идеале функции члены надо определять в другом файле. А определение класса в заголовочный. Ну и сам мейн в третий файл.
Добавлено через 2 минуты Интересно почему?) Я вот Пратта читаю, тут есть такие задания. Он сумасшедший получается?))) Реализация кода в книге конечно не такая тарабарщина в один файл.
1
|
0 / 0 / 1
Регистрация: 01.01.2017
Сообщений: 20
|
|
07.05.2018, 19:51 [ТС] | 5 |
Я текст задания скопировал дословно, а код плод чисто моего больного воображения) подскажите в чем ошибка? И что нужно сделать? (Учусь на дистанционном, теорию беру из онлайн курсов/интернета)
Добавлено через 19 минут Если я сдам этот код приправленный теорией, можно считать что я задание выполнил или как?
0
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
07.05.2018, 21:00 | 6 |
Насколько я помню у него нету книжек по ООП..
Не по теме: И незнаю почему так все читают его, как по мне он сам не далек от студента, ИМХО личное мое мнение Это вообще не в тему Это скорее не просто ООП, а уже задаток к ООД и имелось ввиду что за вывод должна отвечать другая сущность
0
|
621 / 941 / 150
Регистрация: 10.08.2015
Сообщений: 5,018
|
|
07.05.2018, 21:10 | 7 |
Объекты инициализируются конструктором и существуют автономно друг от друга. Тогда зачем создавать студента с ФИО "Фамилия Имя Отчество"? Тебе не было бы обидно, если б препод тебе сказал: эй ты, имярек, объясни мне теорему Бернулли!"?
Ситуация, когда объект инициализируется не полностью, ведет обычно к ошибкам и проблемам, типа, "у меня не работает". Так работает например устаревшая технология COM. И работает она через пень-колоду! Дальше больше. И так мы знаем, что объект рождается конструктором и существует сам по себе. Но тогда зачем эта дурацкая функция setFIO? Она что делает? типа устанавливает имяреку ФИО? ОК, зачем нам конструктор?! А как она Это делает? и что она вообще делает? Как это узнать? Курить маны часами? а что будет если понадобится перейти с консольного интерфейса, на оконный? А не проще ли не выпендриваться и объявить поля публичными, и просто заполнить поля, олдфаги будут рады такому повороту? И вообще, кто дал право имяреку себя создавать? Его дело малое: носить гордо имя и сдавать сессию. а может он еще и под юбку системе залез? нет! так не пойдет. так можно только преподу сдать сессию на трешку. Посмотри фильм терминатор 4, там скайнет создал целую фабрику студентов, полностью исключая малейшую вероятность сбоя. Логика должна быть простой: если получили данные, то создаем объект, пользуем и убиваем. А не как у тебя - создали франкенштейна, а он такой: "а как меня зовут?" и т.д. по цепочке, в итоге подгорит у самого крайнего и никто не поймет почему. Что если надо изменить имя и отчество? или просто имя? или любую комбинацию полей... Для каждой создавать отдельную функцию? или все таки поля публичными или для каждого поля создать set-функцию. Правила ООП предписывают объекту получать данные, только через аргументы функций и нигде не гадить своими данными пс если код собирается и даже правильно работает, не факт, что он написан правильно. Чтоб понять на сколько правильный код может быть нелеп, сравни код на турбо бейсик и код на VB.NET. ппс. твое задание дурацкое, и потому твой код выглядит по-дурацки, не запускал, возможно он даже правильно работает. Итак, две основные ошибки: - дезориентация объектной модели (фактически это автоматическая дисквалификация сферического коня в вакууме) - игнорирование принципов ООП (с отягчающими обстоятельствами)
0
|
369 / 310 / 65
Регистрация: 14.10.2014
Сообщений: 1,318
|
||||||
07.05.2018, 22:44 | 8 | |||||
Сообщение было отмечено kirillisreal как решение
Решение
kirillisreal, Добавлю от себя (если не против ) - конструктор по умолчанию оставить (это тот, который без параметров) так, на всякий случай. Сделал конструктор - сделай и деструктор - тоже без параметров. Тоже думаю, что лишним не будет. Конструктор, который ты используешь в этом коде - это правильный подход с точки зрения программирования, но полный бред с точки зрения логики и здравого смысла. Причина - создавая объект, ты уже должен знать, чем инициализировать закрытые поля этого объекта. Тогда на кой... ему (объекту) нужны функции ввода данных ?
У тебя в коде есть функция её вполне достаточно для инициализации данных. Добавлено через 5 минут Но лучше всего сделать так: Кликните здесь для просмотра всего текста
Добавлено через 7 минут Всё, что я написал - основано на моём (крайне малом и скудном) опыте программирования. Готов выслушать любую критику в свой адрес. И Последнее - в классах, доступ к данным только через гетеры - сетеры и никак иначе. Функции смены имени и вывода данных я бы оставил такими, как у тебя. Ну в общем как-то так ... Добавлено через 3 минуты kirillisreal, Коллега vlisp, кстати написал тоже, что и я только более красочно
1
|
133 / 53 / 43
Регистрация: 09.05.2015
Сообщений: 565
|
|
08.05.2018, 00:29 | 9 |
0
|
621 / 941 / 150
Регистрация: 10.08.2015
Сообщений: 5,018
|
||||||
08.05.2018, 01:38 | 10 | |||||
вообще-то я говорил о том, чтоб передавать данные через параметры
1
|
369 / 310 / 65
Регистрация: 14.10.2014
Сообщений: 1,318
|
|
08.05.2018, 09:19 | 11 |
vlisp, Я просто подумал, что если передавать данные через параметры, то тогда где то ещё в коде нужно будет инициализировать эти параметры (просить пользователя ввести имя например) и только потом передавать эти данные в сетер. Получается код больше и возможно (я в этом деле не специалист) более медленный, потому как вместо одного вызова функции имеем как минимум два вызова функции.
Но сейчас я понимаю, что скорее всего был не прав. спасибо за объяснение
1
|
621 / 941 / 150
Регистрация: 10.08.2015
Сообщений: 5,018
|
|
08.05.2018, 10:45 | 12 |
на уровне сдал и забыл, нет ничего криминального в использовании методов класса для диалога с пользователем через консоль. Но гораздо лучше выглядит, если перенести такой код в main. Она может исполнять роль фабричного метода, делая код более читаемым. В реальных же приложениях все намного сложнее. Проблемы начинаются, когда начинается разделение кода. Такой класс, скомпилированный в библиотеке, может запросто оказаться бесполезным.
0
|
0 / 0 / 1
Регистрация: 01.01.2017
Сообщений: 20
|
|
12.05.2018, 12:29 [ТС] | 13 |
Так стало лучше?)
0
|
621 / 941 / 150
Регистрация: 10.08.2015
Сообщений: 5,018
|
|
12.05.2018, 16:21 | 14 |
нет, нужно еще курс вазелина...
читай внимательно, что выше написали тебе я и Recrut_rf
0
|
12.05.2018, 16:21 | |
12.05.2018, 16:21 | |
Помогаю со студенческими работами здесь
14
Класс для работы со строками Создать класс для работы сo строками Создать класс для работы с строками Написать класс для работы со строками Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |