Вы путаете название языка с тем, что оно должно было означать.
C
был первым, процедурным и не общим (низкий уровень), как выможет знать.
Затем C++
возник как C
с классами и шаблонами.Позже это превратилось в нечто, отличающееся от C
все больше и больше, расширяя свою стандартную библиотеку на каждом этапе.C++
- это многоарадигмальный язык, что означает, что в нем есть что-то для процедурного, общего, функционального (немного) и объектно-ориентированного программирования.Не забывайте, что Boost - это мощное расширение стандартной библиотеки.
Objective-C
- это C, расширенный множеством средств времени выполнения (например, сообщений) для упрощения объектно-ориентированной разработки.Objective-C++
- это те же расширения, которые применяются к C++
, максимально совместимые с исходным языком.
C#
- это нечто совершенно иное.Думайте об этом как о гибриде между Java
и C++
, хотя это вызовет плохую кровь у пользователей всех трех языков.У него есть сборщик мусора.
(Objective-)C
, используемый в основном в Linux, не совсем корректен.Весь KDE - C++
, для одного.C++
в первую очередь для Windows не совсем верно, OS API для всех - C
.То, что Microsoft сделала из C++
API (MFC / ATL), - это настоящий ад.Microsoft продвигает C#
вместе со связанными вещами .Net.Так что C#
следует рассматривать в основном как Windows, хотя в настоящее время предпринимаются усилия по созданию кроссплатформенной альтернативы .Net (моно).API Apple Foundation Objective-C
, но все API-интерфейсы ОС все еще C.
"Supersets" - неправильная терминология.C
не является подмножеством C++
.Оба имеют общее подмножество.Только Objective-C(++)
является чисто расширенным набором C(++)
.
Что касается лучших версий для изучения: последние, очевидно, возможно, ограничены поддержкой компилятора на различных платформах, для которых вы будете писать.