|
0 / 0 / 0
Регистрация: 22.09.2012
Сообщений: 7
|
|
Приведите ситуации когда использование классов лучше структур и функций25.10.2012, 20:31. Показов 5026. Ответов 9
Метки нет (Все метки)
Не соображу, зачем нужны классы? Когда их применение предпочтительнее использования структур и функций и почему?
0
|
|
| 25.10.2012, 20:31 | |
|
Ответы с готовыми решениями:
9
Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов
|
|
74 / 9 / 4
Регистрация: 07.10.2009
Сообщений: 51
|
|
| 25.10.2012, 20:45 | |
|
И классы и структуры по сути являются "контейнерами", которые используются для объединения похожих данных (и функций).
И классы и функции в принципе полностью взаимозаменяемы - и в классе и в функции можно объявить как переменные (поля), так и методы выполняющие действия над ними. Разница лишь в том, что в классе все по умолчанию скрыто (private), а в структуре наоборот все по умолчанию открыто (public). Т.е. по сути это абсолютно идентичные сущности и можно использовать одно вместо другого и наоборот. НО классы обычно используются для объединения параметров и действий над ними (причем эти параметры скрываются от остального "мира" программы - т.н. инкапсуляция происходит), а структуры просто используются для объединения однородных данных. И классы и структуры становятся реально полезными только при крупных проектах, когда человек не может держать весь код в голове(который написал ранее), ведь надо помнить все имена функций, переменных, связи между ними и т.д. а засовывание всего этого хозяйства в один объект который описывает близкие по смыслу значения избавляет нас от лишней головной боли позволяй думать больше о проектировании программы, а не о запоминании где что как называется. В целом доступно? или что то отдельно описать?
0
|
|
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
| 25.10.2012, 20:51 | |
|
Ну, это вопрос философский, и его уже обсуждали.
0
|
|
|
0 / 0 / 0
Регистрация: 22.09.2012
Сообщений: 7
|
|
| 25.10.2012, 20:57 [ТС] | |
|
Принцип работы я понимаю. Единственный сомнительный плюс, который я вижу - это вызов функций без передачи параметров, на некоторых сайтах пишут что это короче, читаемее и вообще "пантово".
В целом, у меня в коде отдельно функции, отдельно структуры, и вроде всё и понятно. Если я из этого построю гигантский класс, не выйдет ли больше путаницы? Мне кажется выйдет... Потом не понятно, если я использую массив структур, то память будет занята только под данные. Если я сделаю класс (зафигачу функции в структуру), то память будет занята еще и методами этого класса. Один и тот же метод будет раскопирован по памяти ровно столько раз, сколько элементов в массиве, - выйдет нерациональное расходование памяти,.. если конечно компилятор не догадается и не оптимизирует... Может есть еще аргументы?
0
|
|
|
74 / 9 / 4
Регистрация: 07.10.2009
Сообщений: 51
|
|
| 25.10.2012, 21:07 | |
|
Вызов функции без передачи параметров - сомнительный плюс. Чем это может быть лучше - ума не приложу. Если цель - ускорить передачу - можно передавать по указателю на константу или по константной ссылке. Но в любом случае даже в классах есть функции с параметрами (взять хотя бы перегрузку операторов "+", "-" и т.д.).
Давайте прикинем - какой ряд действий можно совершить функцией без параметров в классе, а точнее чего нельзя совершить - судя по всему без параметров не получится взаимодействия объекта класса с другими объектами того же класса (как? =))) Поэтому, если нужно например сложить два объекта класса и присвоить результат третьему объекту (факт есть факт -придется два объекта передать в качестве параметра - лучше по ссылке). Так что с этим "аргументом" надеюсь объяснил. Строить гигантский класс конечно не стоит. Во первых если Вы можете обойтись без классов - лучше так и делать, потому что программа будет работать быстрее (если сомневаетесь - поместите весь код в цикл на 1000 раз и замерьте время в одном и в другом случае =)). Но если код начинает неимоверно расти и структура начинает быть такой сложной, что голова идет кругом - тогда начинаем переходить на классы. Классы помогают структурировать программу, сделать код более читаемым для других разработчиков. Насчет памяти под методы класса - не переживайте они создаются в памяти ровно один раз для всех объектов класса. только один!
0
|
|
|
127 / 125 / 16
Регистрация: 03.07.2011
Сообщений: 354
|
|||
| 25.10.2012, 21:08 | |||
|
0
|
|||
|
74 / 9 / 4
Регистрация: 07.10.2009
Сообщений: 51
|
|
| 25.10.2012, 21:23 | |
|
Автор остались еще вопросы? спрашивай не стесняйся - будем вместе разбираться =)
0
|
|
|
0 / 0 / 0
Регистрация: 22.09.2012
Сообщений: 7
|
|
| 25.10.2012, 21:40 [ТС] | |
|
Спасибо, вроде всё прояснилось. sizeof struct и class я всётаки проверю, не может быть чтобы методы не занимали память
0
|
|
|
74 / 9 / 4
Регистрация: 07.10.2009
Сообщений: 51
|
||||||
| 25.10.2012, 23:28 | ||||||
|
Методы занимают место, но только один раз. Подумайте сами - ведь код у них совершенно идентичный для всех объектов класса. Зачем программе хранить лишние данные, если они абсолютно одинаковы? Поля же наоборот у каждого объекта свои - и тут действительно нужно для них выделить место, но для функций только один раз и тогда каждый объект будет вызывать функцию (одну и туже). При этом эта функция может ссылаться напрямую на поля того объекта, который вызвал эту функцию.
Приведу пример:
myclass m1(5,6); myclass m2(4,9); myclass m3; и вызовете функцию m3.add(m1,m2); тогда Вы передадите фактически объекту m3 два объекта в виде параметров, но функция для них все равно одна и та же. Поэтому m3 - может иметь доступ непосредственно к полям (без операции доступа к полям класса "."). Надеюсь понятно объяснил.
0
|
||||||
| 25.10.2012, 23:28 | |
|
Помогаю со студенческими работами здесь
10
Создание программы с использованием собственных функций. Использование массивов и структур Ситуации, когда ссылки или указатели нежелательны
1c8 когда лучше использовать запрос, а когда выбор Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|