Структура C/C++ по сравнению с Классом

После окончания моего класса C++ это казалось мне, структуры/классы фактически идентичны кроме с несколькими незначительными различиями.

Я никогда не программировал в C прежде; но я действительно знаю, что это имеет структуры. В C возможно наследовать другие структуры и установить модификатор общедоступных/частных?

Если можно сделать это в регулярном C, почему в мире нам нужен C++? Что делает классы отличающимися от структуры?

104
задан 1 May 2010 в 14:20
поделиться

4 ответа

В C++ структуры и классы практически одинаковы; единственное различие в том, что там, где модификаторы доступа (для переменных-членов, методов и базовых классов) в классах имеют значение private, модификаторы доступа в структурах имеют значение public.

Однако, в Си, struct - это просто совокупная коллекция (публичных) данных, и не имеет других свойств, подобных классу: ни методов, ни конструктора, ни базовых классов, и т.д. Хотя C++ унаследовал ключевое слово, он расширил семантику. (Однако именно поэтому в структурах по умолчанию используется public - структура, написанная как структура языка Си, ведет себя как структура.)

Хотя в Си можно сымитировать некоторое ООП - например, определить функции, которые все принимают указатель на структуру в качестве первого параметра, или иногда заставить структуры с одинаковыми первыми полями быть "под/суперклассами" - это всегда как бы прикручено, и на самом деле не является частью языка.

141
ответ дан 24 November 2019 в 04:11
поделиться

C ++ использует структуры в первую очередь для 1) обратной совместимости с C и 2) типов POD. У структур C нет методов, наследования или видимости.

1
ответ дан 24 November 2019 в 04:11
поделиться

Кроме различий в доступе по умолчанию (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;

работает только в Си

14
ответ дан 24 November 2019 в 04:11
поделиться

В C невозможно определить функции-члены или вывести структуры друг из друга.

Кроме того, C++ - это не только C + "вывести структуры". Шаблоны, ссылки, определяемые пользователем пространства имен и перегрузка операторов - все это не существует в C.

6
ответ дан 24 November 2019 в 04:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: