С другой стороны, мы можем создать экземпляр объекта и без оператора new - в таком случае он будет расположен в сегменте стека, а не кучи. И снова С++ позволяет делать тонкую настройку.



При передаче объектов мы можем их копировать или передавать по ссылке. Мы даже можем реализовать Move семантику из Rust, просто переопределив поведение оператора =.



А еще C++ ввел понятие RAII. Если кратко, то это идиома управления ресурсами, которая говорит, что ресурсы (например, память, файлы, блокировки) захватываются и освобождаются вместе со временем жизни объектов, а объекту можно задать деструктор.



В отличие от Simula, C++ поддерживает множественное наследование классов, а также абстрактные классы (это такие классы, экземпляры которых не могут быть созданы явно, а только для обозначения интерфейса и при наследовании). Появились и абстрактные методы.



У свойств и методов класса появились модификаторы видимости (public, private, protected), а также понятие дружественных классов - это классы, которые могут получить доступ к не публичному API другого класса.



В общем С++ с одной стороны остается в духе C по эффективности, а с другой стороны добавил огромное количество новых абстракций. Я уже молчу про шаблоны как средство для обобщенного программирования и мономорфизации.



Все это привело к тому, что С++ стал безумно популярным и на нем написано огромное количества ПО системного уровня и не только. Но есть тут и ложка дёгтя - С++ имеет пласт обратной совместимости с C, а с ними и UB; странные и неочевидные моменты. Да и в целом ЯП весьма сложен, а его спецификация огромна. Но мой пост не про это.



Мы можем видеть, что концепция ООП прошла большой путь от Simula к С++. И, вероятно, С++ в значительной степени повлиял на популярность этой парадигмы. Но если отбросить сахар и некоторые тонкости, то С++ идеологически очень близок к Simula.



На сегодня у меня все. Следующий пост будет про другой ЯП из 80-x, который также реализовал модель ОО в С, но на этот раз больше взял от Smalltalk. Думаю, все догадались, что речь пойдет про ObjectiveC.



Всем базы! 💪