Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 22.09.2012
Сообщений: 7

Приведите ситуации когда использование классов лучше структур и функций

25.10.2012, 20:31. Показов 5026. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не соображу, зачем нужны классы? Когда их применение предпочтительнее использования структур и функций и почему?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.10.2012, 20:31
Ответы с готовыми решениями:

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или...

Использование функций и структур
Имеется две задачки, скажу честно , еще не решал...не успеваю...пожалуйста, уважаемые программисты помогите..буду очень признателен... ...

DLL на Си, использование функций и структур
Подскажите пожалуйста такой вопрос Имеется DLL (и .h файл) написанную на Си сто лет назад , как использовать структуры и функции...

9
 Аватар для isvpro
74 / 9 / 4
Регистрация: 07.10.2009
Сообщений: 51
25.10.2012, 20:45
И классы и структуры по сути являются "контейнерами", которые используются для объединения похожих данных (и функций).
И классы и функции в принципе полностью взаимозаменяемы - и в классе и в функции можно объявить как переменные (поля), так и методы выполняющие действия над ними. Разница лишь в том, что в классе все по умолчанию скрыто (private), а в структуре наоборот все по умолчанию открыто (public).
Т.е. по сути это абсолютно идентичные сущности и можно использовать одно вместо другого и наоборот. НО классы обычно используются для объединения параметров и действий над ними (причем эти параметры скрываются от остального "мира" программы - т.н. инкапсуляция происходит), а структуры просто используются для объединения однородных данных.
И классы и структуры становятся реально полезными только при крупных проектах, когда человек не может держать весь код в голове(который написал ранее), ведь надо помнить все имена функций, переменных, связи между ними и т.д. а засовывание всего этого хозяйства в один объект который описывает близкие по смыслу значения избавляет нас от лишней головной боли позволяй думать больше о проектировании программы, а не о запоминании где что как называется.
В целом доступно? или что то отдельно описать?
0
Эксперт С++
 Аватар для Mr.X
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
 Аватар для isvpro
74 / 9 / 4
Регистрация: 07.10.2009
Сообщений: 51
25.10.2012, 21:07
Вызов функции без передачи параметров - сомнительный плюс. Чем это может быть лучше - ума не приложу. Если цель - ускорить передачу - можно передавать по указателю на константу или по константной ссылке. Но в любом случае даже в классах есть функции с параметрами (взять хотя бы перегрузку операторов "+", "-" и т.д.).
Давайте прикинем - какой ряд действий можно совершить функцией без параметров в классе, а точнее чего нельзя совершить - судя по всему без параметров не получится взаимодействия объекта класса с другими объектами того же класса (как? =)))
Поэтому, если нужно например сложить два объекта класса и присвоить результат третьему объекту (факт есть факт -придется два объекта передать в качестве параметра - лучше по ссылке).
Так что с этим "аргументом" надеюсь объяснил.
Строить гигантский класс конечно не стоит. Во первых если Вы можете обойтись без классов - лучше так и делать, потому что программа будет работать быстрее (если сомневаетесь - поместите весь код в цикл на 1000 раз и замерьте время в одном и в другом случае =)).
Но если код начинает неимоверно расти и структура начинает быть такой сложной, что голова идет кругом - тогда начинаем переходить на классы.
Классы помогают структурировать программу, сделать код более читаемым для других разработчиков.
Насчет памяти под методы класса - не переживайте они создаются в памяти ровно один раз для всех объектов класса. только один!
0
 Аватар для Venzo
127 / 125 / 16
Регистрация: 03.07.2011
Сообщений: 354
25.10.2012, 21:08
Цитата Сообщение от emperio Посмотреть сообщение
Если я из этого построю гигантский класс, не выйдет ли больше путаницы? Мне кажется выйдет...
сомнительна цель гигантского класса. Если у вас класс автомобиль, вы врядли в нем будете полностью описывать его сущность, а создадите другие маленькие классы.

Цитата Сообщение от emperio Посмотреть сообщение
Один и тот же метод будет раскопирован по памяти ровно столько раз, сколько элементов в массиве
вы заблуждаетесь.
0
 Аватар для isvpro
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
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
25.10.2012, 21:45
Цитата Сообщение от emperio Посмотреть сообщение
Спасибо, вроде всё прояснилось. sizeof struct и class я всётаки проверю, не может быть чтобы методы не занимали память
Почему не может быть?
0
 Аватар для isvpro
74 / 9 / 4
Регистрация: 07.10.2009
Сообщений: 51
25.10.2012, 23:28
Методы занимают место, но только один раз. Подумайте сами - ведь код у них совершенно идентичный для всех объектов класса. Зачем программе хранить лишние данные, если они абсолютно одинаковы? Поля же наоборот у каждого объекта свои - и тут действительно нужно для них выделить место, но для функций только один раз и тогда каждый объект будет вызывать функцию (одну и туже). При этом эта функция может ссылаться напрямую на поля того объекта, который вызвал эту функцию.
Приведу пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class myclass
{
private:
    int a;
    int b;
public:
    myclass(int x, int y): a(x), b(y) {}
    void add(myclass mc1, myclass mc2)
    {
        a = mc1.a + mc2.a;
        b = mc1.b + mc2.b;
    }
};
Если Вы теперь создадите в функции main например три объекта класса вот так
myclass m1(5,6);
myclass m2(4,9);
myclass m3;

и вызовете функцию m3.add(m1,m2);
тогда Вы передадите фактически объекту m3 два объекта в виде параметров, но функция для них все равно одна и та же. Поэтому m3 - может иметь доступ непосредственно к полям (без операции доступа к полям класса ".").
Надеюсь понятно объяснил.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.10.2012, 23:28
Помогаю со студенческими работами здесь

Не удаётся собрать. Ошибка возникает в том случае, когда хочу получить доступ для объектов классов & структур.
Не удаётся собрать. Ошибка возникает в том случае, когда хочу дать доступ к operator->() для объектов классов & структур. IDE:...

Создание программы с использованием собственных функций. Использование массивов и структур
Здравствуйте! Помогите, пожалуйста, решить задачу. Вот текст: Существует 3 категории учеников: отличник, хорошист, двоечник. ...

Ситуации, когда ссылки или указатели нежелательны
привет. хочю спросить, на какие фундаментальные(стандартные - std::) типы не следует объявлять ссылки/указатели при объявлении параметров...

Когда стоит использовать класс, а когда лучше обойтись без них?
Когда стоит использовать класс, а когда лучше обойтись без них? Когда следует использовать несколько классов? Вот, например. Программа...

1c8 когда лучше использовать запрос, а когда выбор
Хочется в целях повышения образованности уточнить такой момент - когда в восьмерке лучше использовать прямой запрос, а когда выборку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
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, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru