Чем отличается структура от класса?
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 23.12.16 06:10
Оценка: :)
В ранних стандартах C++ структура определялась как набор данных, а класс--как набор данных, функций (методов), констукторов, деструкторов. При этом в классе данные и методы могли быть закрытыми (private)--видны только для функций-членов класса, защищёнными (protected)--видны только для функций-членов класса и для функций-членов классов-потомков и открытыми (public)--видны не только внутри класса и в классах-потомках, но и извне. Классы допускали также наследование--когда от одного класса создаётся класс-потомок, который наследует также и данные и методы первого класса.

А чём отличие структуры от класса в нынешнем стандарте C++? Ведь в структурах, помимо данных, существуют также функции (методы), конструкторы и, как я понимаю, деструкторы.
1613 г. = 2024 г.
Re: Чем отличается структура от класса?
От: 0x7be СССР  
Дата: 23.12.16 06:31
Оценка: 4 (1) +6
Здравствуйте, RussianFellow, Вы писали:

RF>А чём отличие структуры от класса в нынешнем стандарте C++? Ведь в структурах, помимо данных, существуют также функции (методы), конструкторы и, как я понимаю, деструкторы.

Насколько я понимаю, только уровнем сокрытия членов по умолчанию.
В классе всё по умолчанию приватное, в структурах — публичное.
Re[2]: Чем отличается структура от класса?
От: Evgeny.Panasyuk Россия  
Дата: 23.12.16 06:41
Оценка: 2 (1) +5
Здравствуйте, 0x7be, Вы писали:

RF>>А чём отличие структуры от класса в нынешнем стандарте C++? Ведь в структурах, помимо данных, существуют также функции (методы), конструкторы и, как я понимаю, деструкторы.

0>Насколько я понимаю, только уровнем сокрытия членов по умолчанию.
0>В классе всё по умолчанию приватное, в структурах — публичное.

Ещё наследованием — у классов по-умолчанию — private, у стуктур — public.
Re: Чем отличается структура от класса?
От: T4r4sB Россия  
Дата: 23.12.16 08:21
Оценка: +3 :))
Здравствуйте, RussianFellow, Вы писали:

Опять вопрос с собеседования на юниора?
Re: Чем отличается структура от класса?
От: anatolym  
Дата: 23.12.16 09:28
Оценка: :)))
Здравствуйте, RussianFellow, Вы писали:

В с++ структуры не нужны, пользуйся классами.
Re[2]: Чем отличается структура от класса?
От: SergeyOsipov Россия  
Дата: 23.12.16 09:35
Оценка:
Здравствуйте, anatolym, Вы писали:

A>В с++ структуры не нужны, пользуйся классами.


Смелое утверждение.
Re[3]: Чем отличается структура от класса?
От: anatolym  
Дата: 23.12.16 10:30
Оценка:
Здравствуйте, SergeyOsipov, Вы писали:

SO>Здравствуйте, anatolym, Вы писали:


A>>В с++ структуры не нужны, пользуйся классами.


SO>Смелое утверждение.


Ладно, скажем так, если есть набор переменных которые нужно сгруппировать, то структура подойдет лучше.
Но чисто технически разницы между классом и структурой тут нет, только идеологическая. Ну и в классе слово public придется добавить.
Re: Чем отличается структура от класса?
От: Alexander G Украина  
Дата: 23.12.16 12:36
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>В ранних стандартах C++ структура определялась как набор данных, а класс--как набор данных, функций (методов), констукторов, деструкторов. При этом в классе данные и методы могли быть закрытыми (private)--видны только для функций-членов класса, защищёнными (protected)--видны только для функций-членов класса и для функций-членов классов-потомков и открытыми (public)--видны не только внутри класса и в классах-потомках, но и извне. Классы допускали также наследование--когда от одного класса создаётся класс-потомок, который наследует также и данные и методы первого класса.


Это правда когда-то так было?
(Я просто "в теме" с 2007ого)
Русский военный корабль идёт ко дну!
Re[2]: Чем отличается структура от класса?
От: Chorkov Россия  
Дата: 23.12.16 13:24
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>Здравствуйте, RussianFellow, Вы писали:


RF>>В ранних стандартах C++ структура определялась как набор данных, а класс--как набор данных, функций (методов), констукторов, деструкторов. При этом в классе данные и методы могли быть закрытыми (private)--видны только для функций-членов класса, защищёнными (protected)--видны только для функций-членов класса и для функций-членов классов-потомков и открытыми (public)--видны не только внутри класса и в классах-потомках, но и извне. Классы допускали также наследование--когда от одного класса создаётся класс-потомок, который наследует также и данные и методы первого класса.


AG>Это правда когда-то так было?

AG>(Я просто "в теме" с 2007ого)

Нет, не было. Ни в стандарте С++03, ни в хелпах к компиляторам (по крайней мере Borland и MS VC).
Возможно, TC, какой-то совсем дурной учебник читал.
Возможно, он путает struct, с POD-type, потому что в качестве примера для них, все время приводят структуры...
Re[3]: Чем отличается структура от класса?
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 23.12.16 13:26
Оценка: :)))
Здравствуйте, Chorkov, Вы писали:

AG>>Это правда когда-то так было?

AG>>(Я просто "в теме" с 2007ого)

C>Нет, не было. Ни в стандарте С++03, ни в хелпах к компиляторам (по крайней мере Borland и MS VC).

C>Возможно, TC, какой-то совсем дурной учебник читал.
C>Возможно, он путает struct, с POD-type, потому что в качестве примера для них, все время приводят структуры...

Что такое POD-type?

(Учебники по C++ я покупал в 90-ые года и в начале 2000-ых годов).
1613 г. = 2024 г.
Re: Чем отличается структура от класса?
От: Andrew.W Worobow https://github.com/Worobow
Дата: 23.12.16 13:30
Оценка: +1 :))) :)))
Здравствуйте, RussianFellow, Вы писали:

RF>А чём отличие структуры от класса в нынешнем стандарте C++? 


Ответ на засыпку

Структура отличается от класса по мимо доступа по умолчанию и прочего доступа, еще и тем что структуру нельзя использовать в качестве параметра темплейта.

Например так с классом можно,

template <class T>
struct H
{
  T x;
  T y;
}
H<int> ddd;


А так со структурой нельзя.

template <struct T>
struct H
{
  T x;
  T y;
}
H<int> ddd;

 

Завали интервьюера на собеседовании. ))
Не все кто уехал, предал Россию.
Re[2]: Чем отличается структура от класса?
От: viellsky  
Дата: 23.12.16 13:33
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>Например так с классом можно,


AWW>
AWW>template <class T>
AWW>struct H
AWW>


AWW>А так со структурой нельзя.


AWW>
AWW>template <struct T>
AWW>struct H
AWW>


А зачем так сделали, почему запретили такую подстановку?
Re[3]: Чем отличается структура от класса?
От: Andrew.W Worobow https://github.com/Worobow
Дата: 23.12.16 13:34
Оценка:
Здравствуйте, viellsky, Вы писали:

V>А зачем так сделали, почему запретили такую подстановку?


По стандарту.
Не все кто уехал, предал Россию.
Re[4]: Чем отличается структура от класса?
От: viellsky  
Дата: 23.12.16 13:39
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>Здравствуйте, viellsky, Вы писали:


V>>А зачем так сделали, почему запретили такую подстановку?

AWW>По стандарту.
Напоминает анекдот про "мясо не положено".
Интересует — в чём рациональность такого запрета?
Re[5]: Чем отличается структура от класса?
От: Andrew.W Worobow https://github.com/Worobow
Дата: 23.12.16 13:41
Оценка:
Здравствуйте, viellsky, Вы писали:

V>Напоминает анекдот про "мясо не положено".

V>Интересует — в чём рациональность такого запрета?

Ни в чем.
Так в стандарте.
Причем в старом.
Не все кто уехал, предал Россию.
Отредактировано 23.12.2016 13:42 Andrew.W Worobow . Предыдущая версия .
Re[6]: Чем отличается структура от класса?
От: Alexander G Украина  
Дата: 23.12.16 14:46
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

V>>Напоминает анекдот про "мясо не положено".

V>>Интересует — в чём рациональность такого запрета?

AWW>Ни в чем.

AWW>Так в стандарте.
AWW>Причем в старом.

Зато в новом можно вместо enum class писать enum struct (но enum union — нельзя)
Русский военный корабль идёт ко дну!
Re: Чем отличается структура от класса?
От: N. I.  
Дата: 23.12.16 14:58
Оценка:
RussianFellow:

RF>А чём отличие структуры от класса в нынешнем стандарте C++? Ведь в структурах, помимо данных, существуют также функции (методы), конструкторы и, как я понимаю, деструкторы.


Допустим, есть такой код:

struct C;
class C;

Чем, по-твоему, является C — классом или структурой?
Re[3]: Чем отличается структура от класса?
От: Pzz Россия https://github.com/alexpevzner
Дата: 23.12.16 15:11
Оценка: +1
Здравствуйте, viellsky, Вы писали:

V>А зачем так сделали, почему запретили такую подстановку?


Это не озчанает, что темплейту нельзя передать в качестве параметра структуру. Просто в описании темплейта слово class использовать можно, а слово struct — нет. Если бы было можно, они в этом контексте были бы синонимами. Т.е., такое "расширение" языка содержательно ничего бы не добавило.
Re[4]: Чем отличается структура от класса?
От: viellsky  
Дата: 23.12.16 15:40
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Это не озчанает, что темплейту нельзя передать в качестве параметра структуру. Просто в описании темплейта слово class использовать можно, а слово struct — нет. Если бы было можно, они в этом контексте были бы синонимами. Т.е., такое "расширение" языка содержательно ничего бы не добавило.


Но ничего бы и не убавило. При этом в плане прозрачности использования кажется было бы стройнее? Тут ведь как получается — или надо вместо class использовать другое слово, какое-нибудь templatetype — или разрешить использовать слово struct, которое ничем не хуже class.
Re[5]: Чем отличается структура от класса?
От: N. I.  
Дата: 23.12.16 16:07
Оценка:
viellsky:

V>Но ничего бы и не убавило.


Трудно сказать. Потенциально это может слегка замедлить работу парсера.

V>При этом в плане прозрачности использования кажется было бы стройнее?


С чего бы это? Собственно, использование class не всем нравится, потому что в данном контексте оно обозначает произвольный тип, который может не иметь никакого отношения к классам.

V>Тут ведь как получается — или надо вместо class использовать другое слово, какое-нибудь templatetype


В качестве такой альтернативы давным-давно есть ключевое слово typename.

V>или разрешить использовать слово struct, которое ничем не хуже class.


Оно хуже тем, что длиннее на один символ Те, кому длина не важна, могут использовать typename. Так зачем нужен ещё и struct?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.