Другие языки программирования и технологии

Зачем нужны классы, если можно вот так: (*obj.getSomething)(&obj) ?

чтобы их можно было наследовать
Alex Sol
Alex Sol
33 668
Лучший ответ
Игорь Сергиевич Агрегирование.
Чтобы быстро находить нужное место в крупном проекте.
Объектно-ориентированное программирование - это популярная нынче парадигма программирования. Смысл данной парадигмы заключается в том, чтобы описать программу как совокупность объектов. Классы - это способ описать объект.
Вообще есть 4 основных возможности классов.
Инкапсуляция - это сокрытие деталей класса. Предположим вы делаете класс мобильника. Вы же не будете давать пользователю доступ к процессору антенне. Вы дадите пользователю возможно лишь нажимать на экран, пару кнопочек и пару портов (для зарядки и для наушников). Также и в программировании. Когда кто-то будет работать с объектами вашего класса он может не представлять какие внутри переменные, он сможет работать лишь с теми переменными, с которыми вы разрешите ему работать. То есть вы можете насоздавать переменных, необходимых для работы объекта и пользователь вашего класса до них добраться не сможет.
Абстрагирование. Если мы представляем мобильный, то мы представляем его как что-то целостное, а не как набор микросхем, которые друг с другом взаимодействуют. Также и ООП позволяет работать не с кучей переменных а с целостной сущностью.
Наследование. Это фича сильно упрощает программирование. Представьте себе, что вы делаете графический редактор и хотите рисовать фигуры. Они все имеют что-то общее, скажем цвет фигуры и их удалять можно. Вы можете это реализовать в классе фигура, а затем делать разные фигуры и использовать то, что описали в классе фигура.
Полиформизм. свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта. То есть вы можете насоздавать классы телефона и делать метод звонить. Вам неважно на каком телефоне вы будете звонить, набирать номер выбрав контакта в андроиде, набрав кнопками номер или вообще через барышню связаться с абонентом, можно просто позвонить.
КнопочныйТелефон. позвонить ()
Мобильник. позвонить ()
СтарыйТелефонСБарышнями. позвонить ()
Согласитесь, что это проще чем
ПозвонитьСМобильника (*мобильник)
ПозвонитьСоСтарогоТелефона (*СтарыйТелефон)

Также хочу добавить, что с точки зрения С++ структуры это частные случаи классов, только без методов. Без них вам бы пришлось объединять переменные.
Что удобнее
Вот такой код.
НарисоватьФигуру (*Фигура);
ПереместитьФигуру (*Фигура, координаты)
УвеличитьФигуру (*Фигура, коэффициент);
УдалитьФигуру (*Фигура);

Или же вот
Фигура фиг ();
фиг. переместить (координаты);
фиг. увеличить (коэффициент);
~фиг ();
Игорь Сергиевич Первое, разумеется - меньше оверхедов