Подтвердить что ты не робот

Может ли С++ struct иметь функции-члены?

Я был довольно смущен разницей между структурой и классом, поскольку, казалось, видел, что они используются для почти одинаковых вещей. Я искал различия, и единственный ответ, который я видел, заключался в том, что структуры имеют общедоступные элементы по умолчанию, а классы по умолчанию имеют закрытые члены. Однако мои преподаватели только что сказали мне, что структуры не могут содержать функции-члены. Но я видел много потоков в Интернете, где люди включают функции-члены в структурах и в частности говорят, что это нормально.

Мои лекторы кажутся непреклоненными, что структуры по определению не могут иметь функций, так что происходит? Единственное, о чем я мог подумать, это то, что, возможно, компилятор меняет функции внутри структуры на что-то еще, так что они технически не содержат функций... Есть ли ясный ответ на эти противоречия?

4b9b3361

Ответ 1

Я искал различия, и единственный ответ, который я видел, заключался в том, что структуры имеют общедоступные элементы по умолчанию, а классы по умолчанию имеют закрытые члены.

Да, это правильно. Кроме того, основы структуры наследуются публично по умолчанию, тогда как базы класса наследуются по умолчанию по умолчанию.

Объявление функции как члена структуры имеет точно такую ​​же семантику, как и объявление функции как члена класса, за исключением разницы, которую вы отметили. В каждом случае они называются функциями-членами.

Ответ 2

Ваши преподаватели явно ошибаются, предполагая, что они на самом деле говорят о С++, а не C.

Тривиально легко доказать это себе в коде или забрать Язык программирования С++ и найти структуры.

Ответ 3

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

Ответ 4

Мне кажется, что только потому, что что-то разрешено языком, НЕ означает, что это хорошая идея. Хотя технически структура С++ может содержать функции, я не думаю, что исходное намерение типа данных структуры состояло в том, чтобы содержать функции. Разве это не основная цель введения типа класса для поддержки определения данных и логики, которая действует на данные в тесной связи, тем самым способствуя более здоровым интерфейсам к данным?