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

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

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

Не соображу, зачем нужны классы? Когда их применение предпочтительнее использования структур и функций и почему?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.10.2012, 20:31
Ответы с готовыми решениями:

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

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

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

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

9
74 / 9 / 4
Регистрация: 07.10.2009
Сообщений: 51
25.10.2012, 20:45 2
И классы и структуры по сути являются "контейнерами", которые используются для объединения похожих данных (и функций).
И классы и функции в принципе полностью взаимозаменяемы - и в классе и в функции можно объявить как переменные (поля), так и методы выполняющие действия над ними. Разница лишь в том, что в классе все по умолчанию скрыто (private), а в структуре наоборот все по умолчанию открыто (public).
Т.е. по сути это абсолютно идентичные сущности и можно использовать одно вместо другого и наоборот. НО классы обычно используются для объединения параметров и действий над ними (причем эти параметры скрываются от остального "мира" программы - т.н. инкапсуляция происходит), а структуры просто используются для объединения однородных данных.
И классы и структуры становятся реально полезными только при крупных проектах, когда человек не может держать весь код в голове(который написал ранее), ведь надо помнить все имена функций, переменных, связи между ними и т.д. а засовывание всего этого хозяйства в один объект который описывает близкие по смыслу значения избавляет нас от лишней головной боли позволяй думать больше о проектировании программы, а не о запоминании где что как называется.
В целом доступно? или что то отдельно описать?
0
Эксперт С++
3206 / 1733 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
25.10.2012, 20:51 3
Ну, это вопрос философский, и его уже обсуждали.
0
0 / 0 / 0
Регистрация: 22.09.2012
Сообщений: 7
25.10.2012, 20:57  [ТС] 4
Принцип работы я понимаю. Единственный сомнительный плюс, который я вижу - это вызов функций без передачи параметров, на некоторых сайтах пишут что это короче, читаемее и вообще "пантово".
В целом, у меня в коде отдельно функции, отдельно структуры, и вроде всё и понятно. Если я из этого построю гигантский класс, не выйдет ли больше путаницы? Мне кажется выйдет...
Потом не понятно, если я использую массив структур, то память будет занята только под данные. Если я сделаю класс (зафигачу функции в структуру), то память будет занята еще и методами этого класса. Один и тот же метод будет раскопирован по памяти ровно столько раз, сколько элементов в массиве, - выйдет нерациональное расходование памяти,.. если конечно компилятор не догадается и не оптимизирует...
Может есть еще аргументы?
0
74 / 9 / 4
Регистрация: 07.10.2009
Сообщений: 51
25.10.2012, 21:07 5
Вызов функции без передачи параметров - сомнительный плюс. Чем это может быть лучше - ума не приложу. Если цель - ускорить передачу - можно передавать по указателю на константу или по константной ссылке. Но в любом случае даже в классах есть функции с параметрами (взять хотя бы перегрузку операторов "+", "-" и т.д.).
Давайте прикинем - какой ряд действий можно совершить функцией без параметров в классе, а точнее чего нельзя совершить - судя по всему без параметров не получится взаимодействия объекта класса с другими объектами того же класса (как? =)))
Поэтому, если нужно например сложить два объекта класса и присвоить результат третьему объекту (факт есть факт -придется два объекта передать в качестве параметра - лучше по ссылке).
Так что с этим "аргументом" надеюсь объяснил.
Строить гигантский класс конечно не стоит. Во первых если Вы можете обойтись без классов - лучше так и делать, потому что программа будет работать быстрее (если сомневаетесь - поместите весь код в цикл на 1000 раз и замерьте время в одном и в другом случае =)).
Но если код начинает неимоверно расти и структура начинает быть такой сложной, что голова идет кругом - тогда начинаем переходить на классы.
Классы помогают структурировать программу, сделать код более читаемым для других разработчиков.
Насчет памяти под методы класса - не переживайте они создаются в памяти ровно один раз для всех объектов класса. только один!
0
126 / 124 / 16
Регистрация: 03.07.2011
Сообщений: 354
25.10.2012, 21:08 6
Цитата Сообщение от emperio Посмотреть сообщение
Если я из этого построю гигантский класс, не выйдет ли больше путаницы? Мне кажется выйдет...
сомнительна цель гигантского класса. Если у вас класс автомобиль, вы врядли в нем будете полностью описывать его сущность, а создадите другие маленькие классы.

Цитата Сообщение от emperio Посмотреть сообщение
Один и тот же метод будет раскопирован по памяти ровно столько раз, сколько элементов в массиве
вы заблуждаетесь.
0
74 / 9 / 4
Регистрация: 07.10.2009
Сообщений: 51
25.10.2012, 21:23 7
Автор остались еще вопросы? спрашивай не стесняйся - будем вместе разбираться =)
0
0 / 0 / 0
Регистрация: 22.09.2012
Сообщений: 7
25.10.2012, 21:40  [ТС] 8
Спасибо, вроде всё прояснилось. sizeof struct и class я всётаки проверю, не может быть чтобы методы не занимали память
0
Don't worry, be happy
16986 / 9864 / 1900
Регистрация: 27.09.2012
Сообщений: 24,462
Записей в блоге: 1
25.10.2012, 21:45 9
Цитата Сообщение от emperio Посмотреть сообщение
Спасибо, вроде всё прояснилось. sizeof struct и class я всётаки проверю, не может быть чтобы методы не занимали память
Почему не может быть?
0
74 / 9 / 4
Регистрация: 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 - может иметь доступ непосредственно к полям (без операции доступа к полям класса ".").
Надеюсь понятно объяснил.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.10.2012, 23:28

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

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

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

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

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

Приведите пример размещения четырех классов в двух пакетах
Размещения четырех классов в двух пакетах

Когда лучше применять структуры, а когда классы?
Когда лучше применять структуры, а не классы? Покажите на простом примере, но чтоб прочувствовать...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.