0 / 0 / 0
Регистрация: 30.08.2011
Сообщений: 4
|
|
1 | |
Виртуальные функции31.08.2011, 13:43. Показов 2484. Ответов 21
Метки нет (Все метки)
Составить программу в С Buildere. Объявить базовый класс с именем person {имя, возраст, группа}. Определить функцию show (), которая отображает информацию о человеке, как виртуальную функцию. Объявить производный класс student = {имя, возраст, группы, департамента}. Переопределить функцию show (), которая показывает студентов в порядке убывания по годам. ХЕЕЕЛП!!!!
0
|
31.08.2011, 13:43 | |
Ответы с готовыми решениями:
21
Виртуальные и чисто виртуальные функции виртуальные функции Виртуальные функции Виртуальные функции |
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
31.08.2011, 13:50 | 2 |
Нехило так. Интересно. От человека значит наследуется класс студент, а затем оказывается что студентов (в классе студент) должно быть более одного, дабы переопределить функцию show по заданию. Бред.
1
|
Заблокирован
|
|
31.08.2011, 14:09 | 3 |
1. Создаём класс Персоны, закладываем в него вирт. диструктор, вирт функцию Показа.
2. Наследуем студентов от персон. 3. Добавляем новое поле "департамента". 4. Добавляем статический ассоциативный массив мультимап<возвраст_студента, Указатель_на_этого_студента> 5. В конструкторе студентов реализуем автоматическую регистрацию нового студента в статическом мультемапе. 6. Создадим у студентов функцию: ПоказатьСебя(); //которая выдаст на экран информацию об этом студенте. 7. Переопределяем виртуальную функцию показа, которая пробежится по мультимапу, и дергая из него указатели студентов, каждому студенту сделает: pStudents -> ShowMe(); 8. После того, как все студенты отчитались о себе, добавим в конце послание преподавателю: ТАК ДЕЛАТЬ НЕЛЬЗЯ! СТУДЕНТЫ НЕ ДОЛЖНЫ ЗНАТЬ О СУЩЕСТВОВАНИИ ДРУГИХ СТУДЕНТОВ. ОШИБКА АРХИТЕКТУРЫ.
2
|
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
|
||||||
31.08.2011, 16:46 | 4 | |||||
0
|
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
|
|
31.08.2011, 16:48 | 5 |
выход
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
31.08.2011, 16:58 | 6 | |||||
Делать нечего...
0
|
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
|
||||||
31.08.2011, 17:07 | 7 | |||||
черт департамент забыл
Добавлено через 1 минуту
0
|
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
|
|
31.08.2011, 17:11 | 9 |
Bers, ну извини. пока только так.)
0
|
Заблокирован
|
||||||
31.08.2011, 17:59 | 10 | |||||
Ну это ладно. Но обратите внимание:
Во-первых имя - МАП. Это никуда не годится. Оно не отражает сути. Что именно хранит внутри себя этот мап? Во-вторых, как именно создан статический мультимап у вас? Идеологически, он является внутренней частью реализации класса студентов. Но у вас он вообще вынесен за пределы класса, и доступ к нему можно получить из любой точки программы. Это - архитектурный промах. Он должен быть в приватной зоне класса-хозяина. В-третьих, ключевые слова const. У вас их вообще нигде нету. А должны быть! Мы ведь боремся за гигиеническую чистоту нашего кода, правда ведь? /зы присмотритесь к варианту господина ForEveRa. Просто сравните. Вроде бы все тоже самое, но у него сразу чувствуется, что код писался солидным, опытным программистом. /ззы не сочтите за умника, я далеко не великий программист. И сам ещё только-только учусь. Добавлено через 5 минут Единственное, что мне не понятно в коде господина ForEveR, так это гм...
Не проще ли, использовать обычный cout тогда?
1
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
31.08.2011, 19:25 | 11 |
Bers, проще, но не дальновидно. А что, если в файл придется выводить?
0
|
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
|
|
31.08.2011, 20:30 | 12 |
Bers, ну все верно. много чего можно довести. Абсолютно со всем согласен. так это был просто выстрел от бедра от АзаКендлер)) когда все матерые кодеры послали тетю и только один Берс сформировал ТЗ и включил зеленый свет. А так..дешево и сердито. Разве нет? Ну похвали уже..Я ж учу еще.
И вообще, конечно однозначно надо все делать по науке, но не в ущерб общей мысли. тут где то была темка там просили составить Хэллоу уорд! От там парни поизгалялись. И так и эдак выкручивали с этой надписью. Думаю чем проще и ближе к заданию тем лучше. Надо вывести - на. Добавлено через 17 минут ну и если честно и объективно, если std::string например часто проходит по тексту, разве не правильней его вынести в using? просто я как новичок могу подумать что так и надо делать всегда полные объявления
0
|
Заблокирован
|
|
31.08.2011, 21:28 | 14 |
Понял)
Но тогда получается, что: 1. Придётся, предварительно ручками подготавливать поток вывода, и передавать его явно в качестве параметра, что бы класс сделал свою работу. (Излишняя нагрузка на вызывающую сторону) 2. Вызывающей стороне придётся самостоятельно контролировать, корректность работы потока, передаваемого объекту класса, в качестве параметра. В частности, проверять смог ли поток успешно открыть файл, или нет, и не забывать сделать потоку close() 3. Таким образом, вместо того, что бы заложить возможность введения дополнительного функционала, вы заложили сам фунционал, работа по подготовке которого полностью ложиться на плечи вызывающей стороны (пользователя). Лично я считаю, что если вдруг приспичило выводить результат ещё и в файл - лучше добавить специализированный метод, принимающий в качестве параметра имя файла. Метод сам откроет файл в соответствии с новой задачей: в режиме перезаписи, или ещё как то... И сам проверит успешность всей операции. Ведь класс для того и создаётся: с целью облегчить жизнь вызывающей стороне, избавить её от львиной части рутины, по подготовкам и проверкам. Он должен быть максимально устойчивым к ошибкам, а следовательно - принимать извне как можно меньше параметров. Если вдруг, в самом конце работы над большим кодом, вдруг внезапно оказалось, что все это время нужно было выводить результат в файл, а не в консоль, и надо везде переделывать код - то это уже не дефект архитектуры, это - косяк планирования. Можно вылечить за счет добавления в зоне инициализации: Подготовка класса к работе: Студент.SetShowMode(Режим); //здесь можно задать так, что бы студент результат писал в файл //метод сам подготовит поток вывода в соответствии с режимом, и проверит успешность всех операций ... Cтудент.Show(); //Сам же вывод по прежнему без изменений. Нигде в программе править не придётся. Добавлено через 10 минут
0
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
||||||
01.09.2011, 01:41 | 15 | |||||
Нет, лучше сразу забудьте о существовании этой директивы. Даже если пространство имен очень длинновато, то лучше вместа using сделать на него alias:
1
|
CyBOSSeR
|
||||||
01.09.2011, 01:42
#16
|
||||||
1
|
AzaKendler
|
01.09.2011, 08:42
#17
|
Не по теме: CyBOSSeR, спасибо. а в 2х словах можно почему так? Просто читаю Страуструпа он не ругается если using std::string использовать. Поясни почему плиз, хочу понять, а отдельную тему глупо создавать ради этого пояснения
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
01.09.2011, 08:46 | 18 |
AzaKendler, Потому что не только std используется. Много namespace-ов есть. Собственно namespace и были созданы, дабы избежать колизии имен.
Добавлено через 35 секунд Bers, Лучше вывод в поток тогда грузануть. Удобнее, логичнее. Добавлено через 1 минуту В другом h файле сделали using somelib::string. Оба файла подключены в один cpp. Что мы получим в итоге? Ошибку о том, что разрешить имя string не удается.
1
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|
01.09.2011, 09:06 | 19 |
AzaKendler, использовать using таким образом можно, но локально.
1
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
01.09.2011, 09:08 | 20 |
Про string не айс пример. Возьмем либо basic_string, либо map, либо vector. Что угодно.
0
|
01.09.2011, 09:08 | |
01.09.2011, 09:08 | |
Помогаю со студенческими работами здесь
20
Виртуальные функции Виртуальные функции Виртуальные функции Виртуальные функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |