|
8 / 8 / 0
Регистрация: 11.06.2023
Сообщений: 21
|
||||||
Абстрактный класс Cats. Наследование14.06.2023, 21:12. Показов 2730. Ответов 33
Метки классы c++, лабораторная работа, наследование с++, пользовательский тип данных, с++ 1 курс (Все метки)
Здравствуйте уважаемые форумчане. Представляю вашему вниманию мою реализацию одной из лабораторных работ, которые нам задали в универе. Прошу вас прорецензировать мой код и поправить меня, если найдёте ошибки. Был бы очень благодарен, если вы дадите советы по улучшению оформления кода, так как я новичок в программировании и могу допускать очевидные для вас, но не для меня ошибки.
За бэд инглиш в коде извините ![]() Итак, лабораторка: В рамках работы необходимо разработать иерархию классов на указанную в варианте тему. В иерархии должен быть корневой класс (базовый), который должен быть абстрактным и содержать общие для остальных поля и методы. У каждого из классов должен быть хотя бы один собственный метод. Также должны быть продемонстрированы виртуальные и переопределённые методы. Переопределенные методы должны также вызывать методы базового класса если это оправдано. В каждом классе должны быть: 1. метод, выводящий имя данного класса; 2. метод, выводящий в виде строки всю информацию об объекте – тип, имена и значения полей; 3. конструктор без параметров; 4. конструктор с параметрами; 5. деструктор. Рекомендуемые поля и методы указаны в варианте, однако возможно придумать и свои. Также необходимо написать программу с меню, позволяющую протестировать разработанную иерархию. В ходе программы создаётся массив минимум из 4-х элементов, в котором хранятся указатели на объекты базового класса. Обязательные пункты меню: 1. добавление нового объекта выбранного пользователем класса в массив; 2. выполнение указанного метода базового класса для всех объектов массива (у каждого должен выполниться перегруженный вариант); 3. вывод всех объектов в массиве; 4. выполнение уникального для указанного объекта метода. Вариативная часть: Класс: Кошки; Варианты полей: вес, пол, возраст, имя; Варианты методов: поиграть, покормить, погладить; Возможные классы иерархии: кошки (базовый), шотландская вислоухая, мейн кун, персидская, сфинкс (хотя это такая себе кошка); Мой код:
0
|
||||||
| 14.06.2023, 21:12 | |
|
Ответы с готовыми решениями:
33
Абстрактный класс, наследование, класс хранится в другом классе Абстрактный класс. Наследование Наследование и абстрактный класс |
|
Супер-модератор
|
|
| 15.06.2023, 12:33 | |
|
KSergey9, "Представьте, например, что в конструкторе динамически выделяется память. Тогда затем в копирующем операторе присваивания эта память будет переопределяться" - а если динамическая память не выделяется?
0
|
|
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|||
| 15.06.2023, 12:50 | |||
|
Мне уже было лень писать сразу, но сейчас напишу: умаю, что основное - это не "больше накладных расходов" из-за повторной инициализацией, логично, что оптимизатор это выкинет, но есть еще другой аспект: порядок инициализации. И вот он уже может быть разным при инициализации полей за пределами конструктора и внутри конструктора. Впрочем, вероятно я действительно зря написал "простые типы". Добавлено через 1 минуту Добавлено через 3 минуты Еще есть существенный момент для "где инициализировать" - это случай, когда конструктор какого-то поля класса выкидывает исключение. (да, это явно не про "простые типы") Но расписывать подробно не буду, а то тут все сильно умные, без дела до запятых докапываются без предлагания своих верных определений, а я стопроцентов тут налажаю в каком-нибудь нюансе, если возьмусь сам про это писать. Кому интересно - нагуглит тему
0
|
|||
|
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
|
||||||||||
| 15.06.2023, 13:17 | ||||||||||
|
Вот здесь нет никакой "повторной" инициализации
Нельзя выкинуть то, чего не существует. Если явно не задать стартовое значение, то объект примитивного типа будет содержать мусор. Это связанно с тем, что у примитивных типов вообще нет никаких конструкторов. Для примитивных типов, компилятор не генерирует никакого специального кода, который бы как то инициализировал память по умолчанию. Поэтому оптимизировать попросту нечего. Порядок инициализации зависит только и только от порядка объявления полей. И имеет значение только и только на стадии инициализации полей. К моменту запуска основного тела конструктора, вся инициализация полей уже завершена. Ваши "разные порядки инициализации полей за пределами конструктора, и внутри конструктора" - это какой то бред. Бессмысленный набор слов. Добавлено через 2 минуты
1
|
||||||||||
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
||||
| 15.06.2023, 13:18 | ||||
|
Уверен, мир станет много лучше. И да, прекратите хамить. Это фу как некрасиво.
0
|
||||
|
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
|
|
| 15.06.2023, 13:22 | |
|
0
|
|
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|
| 15.06.2023, 13:29 | |
|
0
|
|
|
6296 / 3018 / 1053
Регистрация: 01.06.2021
Сообщений: 11,447
|
||||
| 15.06.2023, 14:20 | ||||
|
0
|
||||
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
||||
| 15.06.2023, 14:42 | ||||
|
0
|
||||
| 15.06.2023, 14:52 | |||||
|
Не по теме:
0
|
|||||
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
||
| 15.06.2023, 15:02 | ||
|
А для новичка - да, формулировка весьма императивная. На мой взгляд, вполне допустимо навязать догмы полезные, а уже потом человек разберётся что где и почему. Но до того момента наломает меньше дров просто следуя догмам, пусть и без понимания глубины и сути. Ибо если всё объяснять и сразу - в общем мне как-то жаль такого новичка, на которого по каждой проблеме вываливают абсолютно все глубины сразу.
2
|
||
|
Комп_Оратор)
|
||
| 15.06.2023, 21:37 | ||
=default;, действительно, может снизить количество кода. Но зато видя конструктор вы с одного взгляда можете сказать, что и чем инициализируется по умолчанию, то есть, не просматривая всё тело описания класса. Вопрос не однозначный. Иногда да, иногда - нет. Императивность "всегда", бывает нужна при ловле блох (имо) )
0
|
||
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
||
| 16.06.2023, 05:40 | ||
|
Где были ваши объяснения, помимо не относящихся к делу пространных рассуждений по зоо-терминологии?
0
|
||
|
Комп_Оратор)
|
||||
| 16.06.2023, 08:13 | ||||
|
KSergey9, ещё один возглас в таком духе и вы - ещё один, с которым я не стану общаться. Что касается предметной области (о кошках тема), то она просто напрямую связана с классами и наследованием. То что вы этого не чувствуете не упрёк. Я видел достаточно много программистов C++, которые не имеют глубокого понимания базовых вещей и нормально живут. Я писал о том, что виртуальный метод, возвращающий имя домашней кошки, это глумление над наследованием. И ещё я писал, что стоит подумать над теми формами поведения, которые действительно, стоит имплементировать у потомков для кошачьих. На уровне интерфейса, представляемого чисто виртуальным методом. О аксессорах я тоже написал с аргументацией. ТС, кстати, всё понял настолько хорошо, что я даже плюсанул его ответное обращение. KSergey9, вместо того, чтобы огрызаться в стиле "сам дурак", который предполагает неявное согласие с тем что "я дурак, но и ты тоже", просто отвечайте с аргументами, если они есть. Я "ещё один" не случайно. И для меня важно не то что вместо "иногда", вы употребили "всегда", там где это не нужно. Я выступил увидев ваш пассаж о императивности для новичка. Что есть вид бессмысленного и беспощадного интеллектуального насилия.
1
|
||||
| 16.06.2023, 08:13 | |
|
Наследование классов, абстрактный класс
Абстрактный базовый класс и множественное наследование
Абстрактный класс, одиночное наследование, далее множественное Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу)))
Критические ошибки, мешающие компиляции и. . .
|
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата)
Этот документ предназначен для того, чтобы новый чат Claude мог продолжить
работу без необходимости заново разбираться в. . .
|
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса
Калибровка параметров симбиотической модели: технический обзор
Содержание:
Введение
Постановка проблемы
Технические аспекты реализации
Процесс внедрения изменений
|
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0»
https:/ / ibb. co/ NnkGpfMd
Представленная интегрированная схема описывает непрерывную нелинейную. . .
|
|
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы
### Аннотация
Представлено исследование по разработке агентной модели микоризной. . .
|
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики
Контекст
Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
|
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии
Введение
Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
|
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np
class PlantAgent:
def __init__(self, name, strategy, initial_biomass):
self. name = name
self. strategy = strategy # "greedy" (широколиственные) или. . .
|