Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
emperio
0 / 0 / 0
Регистрация: 22.09.2012
Сообщений: 7
25.10.2012, 20:31     Приведите ситуации когда использование классов лучше структур и функций #1
Не соображу, зачем нужны классы? Когда их применение предпочтительнее использования структур и функций и почему?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2012, 20:31     Приведите ситуации когда использование классов лучше структур и функций
Посмотрите здесь:

Создание программы с использованием собственных функций. Использование массивов и структур C++
C++ Операторы классов и структур
Использование функций и структур C++
Итерационные циклы,Определение и вызов функций,Использование библиотечных функций stdio.h C++
Использование строк.Использование структур C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
isvpro
72 / 7 / 1
Регистрация: 07.10.2009
Сообщений: 51
25.10.2012, 20:45     Приведите ситуации когда использование классов лучше структур и функций #2
И классы и структуры по сути являются "контейнерами", которые используются для объединения похожих данных (и функций).
И классы и функции в принципе полностью взаимозаменяемы - и в классе и в функции можно объявить как переменные (поля), так и методы выполняющие действия над ними. Разница лишь в том, что в классе все по умолчанию скрыто (private), а в структуре наоборот все по умолчанию открыто (public).
Т.е. по сути это абсолютно идентичные сущности и можно использовать одно вместо другого и наоборот. НО классы обычно используются для объединения параметров и действий над ними (причем эти параметры скрываются от остального "мира" программы - т.н. инкапсуляция происходит), а структуры просто используются для объединения однородных данных.
И классы и структуры становятся реально полезными только при крупных проектах, когда человек не может держать весь код в голове(который написал ранее), ведь надо помнить все имена функций, переменных, связи между ними и т.д. а засовывание всего этого хозяйства в один объект который описывает близкие по смыслу значения избавляет нас от лишней головной боли позволяй думать больше о проектировании программы, а не о запоминании где что как называется.
В целом доступно? или что то отдельно описать?
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
25.10.2012, 20:51     Приведите ситуации когда использование классов лучше структур и функций #3
Ну, это вопрос философский, и его уже обсуждали.
emperio
0 / 0 / 0
Регистрация: 22.09.2012
Сообщений: 7
25.10.2012, 20:57  [ТС]     Приведите ситуации когда использование классов лучше структур и функций #4
Принцип работы я понимаю. Единственный сомнительный плюс, который я вижу - это вызов функций без передачи параметров, на некоторых сайтах пишут что это короче, читаемее и вообще "пантово".
В целом, у меня в коде отдельно функции, отдельно структуры, и вроде всё и понятно. Если я из этого построю гигантский класс, не выйдет ли больше путаницы? Мне кажется выйдет...
Потом не понятно, если я использую массив структур, то память будет занята только под данные. Если я сделаю класс (зафигачу функции в структуру), то память будет занята еще и методами этого класса. Один и тот же метод будет раскопирован по памяти ровно столько раз, сколько элементов в массиве, - выйдет нерациональное расходование памяти,.. если конечно компилятор не догадается и не оптимизирует...
Может есть еще аргументы?
isvpro
72 / 7 / 1
Регистрация: 07.10.2009
Сообщений: 51
25.10.2012, 21:07     Приведите ситуации когда использование классов лучше структур и функций #5
Вызов функции без передачи параметров - сомнительный плюс. Чем это может быть лучше - ума не приложу. Если цель - ускорить передачу - можно передавать по указателю на константу или по константной ссылке. Но в любом случае даже в классах есть функции с параметрами (взять хотя бы перегрузку операторов "+", "-" и т.д.).
Давайте прикинем - какой ряд действий можно совершить функцией без параметров в классе, а точнее чего нельзя совершить - судя по всему без параметров не получится взаимодействия объекта класса с другими объектами того же класса (как? =)))
Поэтому, если нужно например сложить два объекта класса и присвоить результат третьему объекту (факт есть факт -придется два объекта передать в качестве параметра - лучше по ссылке).
Так что с этим "аргументом" надеюсь объяснил.
Строить гигантский класс конечно не стоит. Во первых если Вы можете обойтись без классов - лучше так и делать, потому что программа будет работать быстрее (если сомневаетесь - поместите весь код в цикл на 1000 раз и замерьте время в одном и в другом случае =)).
Но если код начинает неимоверно расти и структура начинает быть такой сложной, что голова идет кругом - тогда начинаем переходить на классы.
Классы помогают структурировать программу, сделать код более читаемым для других разработчиков.
Насчет памяти под методы класса - не переживайте они создаются в памяти ровно один раз для всех объектов класса. только один!
Venzo
 Аватар для Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
25.10.2012, 21:08     Приведите ситуации когда использование классов лучше структур и функций #6
Цитата Сообщение от emperio Посмотреть сообщение
Если я из этого построю гигантский класс, не выйдет ли больше путаницы? Мне кажется выйдет...
сомнительна цель гигантского класса. Если у вас класс автомобиль, вы врядли в нем будете полностью описывать его сущность, а создадите другие маленькие классы.

Цитата Сообщение от emperio Посмотреть сообщение
Один и тот же метод будет раскопирован по памяти ровно столько раз, сколько элементов в массиве
вы заблуждаетесь.
isvpro
72 / 7 / 1
Регистрация: 07.10.2009
Сообщений: 51
25.10.2012, 21:23     Приведите ситуации когда использование классов лучше структур и функций #7
Автор остались еще вопросы? спрашивай не стесняйся - будем вместе разбираться =)
emperio
0 / 0 / 0
Регистрация: 22.09.2012
Сообщений: 7
25.10.2012, 21:40  [ТС]     Приведите ситуации когда использование классов лучше структур и функций #8
Спасибо, вроде всё прояснилось. sizeof struct и class я всётаки проверю, не может быть чтобы методы не занимали память
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11809 / 6788 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
25.10.2012, 21:45     Приведите ситуации когда использование классов лучше структур и функций #9
Цитата Сообщение от emperio Посмотреть сообщение
Спасибо, вроде всё прояснилось. sizeof struct и class я всётаки проверю, не может быть чтобы методы не занимали память
Почему не может быть?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2012, 23:28     Приведите ситуации когда использование классов лучше структур и функций
Еще ссылки по теме:

Запись классов, структур в файл C++
C++ От структур к классам, композиция классов
C++ Передача структур разных классов

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

Или воспользуйтесь поиском по форуму:
isvpro
72 / 7 / 1
Регистрация: 07.10.2009
Сообщений: 51
25.10.2012, 23:28     Приведите ситуации когда использование классов лучше структур и функций #10
Методы занимают место, но только один раз. Подумайте сами - ведь код у них совершенно идентичный для всех объектов класса. Зачем программе хранить лишние данные, если они абсолютно одинаковы? Поля же наоборот у каждого объекта свои - и тут действительно нужно для них выделить место, но для функций только один раз и тогда каждый объект будет вызывать функцию (одну и туже). При этом эта функция может ссылаться напрямую на поля того объекта, который вызвал эту функцию.
Приведу пример:
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 - может иметь доступ непосредственно к полям (без операции доступа к полям класса ".").
Надеюсь понятно объяснил.
Yandex
Объявления
25.10.2012, 23:28     Приведите ситуации когда использование классов лучше структур и функций
Ответ Создать тему
Опции темы

Текущее время: 20:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru