После окончания моего класса C++ это казалось мне, структуры/классы фактически идентичны кроме с несколькими незначительными различиями.
Я никогда не программировал в C прежде; но я действительно знаю, что это имеет структуры. В C возможно наследовать другие структуры и установить модификатор общедоступных/частных?
Если можно сделать это в регулярном C, почему в мире нам нужен C++? Что делает классы отличающимися от структуры?
В C++ структуры и классы практически одинаковы; единственное различие в том, что там, где модификаторы доступа (для переменных-членов, методов и базовых классов) в классах имеют значение private, модификаторы доступа в структурах имеют значение public.
Однако, в Си, struct - это просто совокупная коллекция (публичных) данных, и не имеет других свойств, подобных классу: ни методов, ни конструктора, ни базовых классов, и т.д. Хотя C++ унаследовал ключевое слово, он расширил семантику. (Однако именно поэтому в структурах по умолчанию используется public - структура, написанная как структура языка Си, ведет себя как структура.)
Хотя в Си можно сымитировать некоторое ООП - например, определить функции, которые все принимают указатель на структуру в качестве первого параметра, или иногда заставить структуры с одинаковыми первыми полями быть "под/суперклассами" - это всегда как бы прикручено, и на самом деле не является частью языка.
C ++ использует структуры в первую очередь для 1) обратной совместимости с C и 2) типов POD. У структур C нет методов, наследования или видимости.
Кроме различий в доступе по умолчанию (public/private), разницы нет.
Однако некоторые магазины, которые кодируют на C и C++, используют "class/struct" для обозначения того, что можно использовать в C и C++ (struct), а что только в C++ (class). Другими словами, в этом стиле все struct должны работать с C и C++. Это своего рода причина, по которой когда-то давно, еще когда С++ был известен как "С с классами", существовало различие.
Заметьте, что союзы Си работают с Си++, но не наоборот. Например
union WorksWithCppOnly{
WorksWithCppOnly():a(0){}
friend class FloatAccessor;
int a;
private:
float b;
};
И аналогично
typedef union friend{
int a;
float b;
} class;
работает только в Си
В C невозможно определить функции-члены или вывести структуры друг из друга.
Кроме того, C++ - это не только C + "вывести структуры". Шаблоны, ссылки, определяемые пользователем пространства имен и перегрузка операторов - все это не существует в C.