В ранних стандартах C++ структура определялась как набор данных, а класс--как набор данных, функций (методов), констукторов, деструкторов. При этом в классе данные и методы могли быть закрытыми (private)--видны только для функций-членов класса, защищёнными (protected)--видны только для функций-членов класса и для функций-членов классов-потомков и открытыми (public)--видны не только внутри класса и в классах-потомках, но и извне. Классы допускали также наследование--когда от одного класса создаётся класс-потомок, который наследует также и данные и методы первого класса.
А чём отличие структуры от класса в нынешнем стандарте C++? Ведь в структурах, помимо данных, существуют также функции (методы), конструкторы и, как я понимаю, деструкторы.
Здравствуйте, RussianFellow, Вы писали:
RF>А чём отличие структуры от класса в нынешнем стандарте C++? Ведь в структурах, помимо данных, существуют также функции (методы), конструкторы и, как я понимаю, деструкторы.
Насколько я понимаю, только уровнем сокрытия членов по умолчанию.
В классе всё по умолчанию приватное, в структурах — публичное.
Здравствуйте, 0x7be, Вы писали:
RF>>А чём отличие структуры от класса в нынешнем стандарте C++? Ведь в структурах, помимо данных, существуют также функции (методы), конструкторы и, как я понимаю, деструкторы. 0>Насколько я понимаю, только уровнем сокрытия членов по умолчанию. 0>В классе всё по умолчанию приватное, в структурах — публичное.
Ещё наследованием — у классов по-умолчанию — private, у стуктур — public.
Здравствуйте, SergeyOsipov, Вы писали:
SO>Здравствуйте, anatolym, Вы писали:
A>>В с++ структуры не нужны, пользуйся классами.
SO>Смелое утверждение.
Ладно, скажем так, если есть набор переменных которые нужно сгруппировать, то структура подойдет лучше.
Но чисто технически разницы между классом и структурой тут нет, только идеологическая. Ну и в классе слово public придется добавить.
Здравствуйте, RussianFellow, Вы писали:
RF>В ранних стандартах C++ структура определялась как набор данных, а класс--как набор данных, функций (методов), констукторов, деструкторов. При этом в классе данные и методы могли быть закрытыми (private)--видны только для функций-членов класса, защищёнными (protected)--видны только для функций-членов класса и для функций-членов классов-потомков и открытыми (public)--видны не только внутри класса и в классах-потомках, но и извне. Классы допускали также наследование--когда от одного класса создаётся класс-потомок, который наследует также и данные и методы первого класса.
Это правда когда-то так было?
(Я просто "в теме" с 2007ого)
Здравствуйте, Alexander G, Вы писали:
AG>Здравствуйте, RussianFellow, Вы писали:
RF>>В ранних стандартах C++ структура определялась как набор данных, а класс--как набор данных, функций (методов), констукторов, деструкторов. При этом в классе данные и методы могли быть закрытыми (private)--видны только для функций-членов класса, защищёнными (protected)--видны только для функций-членов класса и для функций-членов классов-потомков и открытыми (public)--видны не только внутри класса и в классах-потомках, но и извне. Классы допускали также наследование--когда от одного класса создаётся класс-потомок, который наследует также и данные и методы первого класса.
AG>Это правда когда-то так было? AG>(Я просто "в теме" с 2007ого)
Нет, не было. Ни в стандарте С++03, ни в хелпах к компиляторам (по крайней мере Borland и MS VC).
Возможно, TC, какой-то совсем дурной учебник читал.
Возможно, он путает struct, с POD-type, потому что в качестве примера для них, все время приводят структуры...
Здравствуйте, Chorkov, Вы писали:
AG>>Это правда когда-то так было? AG>>(Я просто "в теме" с 2007ого)
C>Нет, не было. Ни в стандарте С++03, ни в хелпах к компиляторам (по крайней мере Borland и MS VC). C>Возможно, TC, какой-то совсем дурной учебник читал. C>Возможно, он путает struct, с POD-type, потому что в качестве примера для них, все время приводят структуры...
Что такое POD-type?
(Учебники по C++ я покупал в 90-ые года и в начале 2000-ых годов).
Здравствуйте, 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;
Здравствуйте, Andrew.W Worobow, Вы писали:
AWW>Здравствуйте, viellsky, Вы писали:
V>>А зачем так сделали, почему запретили такую подстановку? AWW>По стандарту.
Напоминает анекдот про "мясо не положено".
Интересует — в чём рациональность такого запрета?
Здравствуйте, Andrew.W Worobow, Вы писали:
V>>Напоминает анекдот про "мясо не положено". V>>Интересует — в чём рациональность такого запрета?
AWW>Ни в чем. AWW>Так в стандарте. AWW>Причем в старом.
Зато в новом можно вместо enum class писать enum struct (но enum union — нельзя)
RussianFellow:
RF>А чём отличие структуры от класса в нынешнем стандарте C++? Ведь в структурах, помимо данных, существуют также функции (методы), конструкторы и, как я понимаю, деструкторы.
Допустим, есть такой код:
struct C;
class C;
Чем, по-твоему, является C — классом или структурой?
Здравствуйте, viellsky, Вы писали:
V>А зачем так сделали, почему запретили такую подстановку?
Это не озчанает, что темплейту нельзя передать в качестве параметра структуру. Просто в описании темплейта слово class использовать можно, а слово struct — нет. Если бы было можно, они в этом контексте были бы синонимами. Т.е., такое "расширение" языка содержательно ничего бы не добавило.
Здравствуйте, Pzz, Вы писали:
Pzz>Это не озчанает, что темплейту нельзя передать в качестве параметра структуру. Просто в описании темплейта слово class использовать можно, а слово struct — нет. Если бы было можно, они в этом контексте были бы синонимами. Т.е., такое "расширение" языка содержательно ничего бы не добавило.
Но ничего бы и не убавило. При этом в плане прозрачности использования кажется было бы стройнее? Тут ведь как получается — или надо вместо class использовать другое слово, какое-нибудь templatetype — или разрешить использовать слово struct, которое ничем не хуже class.
Трудно сказать. Потенциально это может слегка замедлить работу парсера.
V>При этом в плане прозрачности использования кажется было бы стройнее?
С чего бы это? Собственно, использование class не всем нравится, потому что в данном контексте оно обозначает произвольный тип, который может не иметь никакого отношения к классам.
V>Тут ведь как получается — или надо вместо class использовать другое слово, какое-нибудь templatetype
В качестве такой альтернативы давным-давно есть ключевое слово typename.
V>или разрешить использовать слово struct, которое ничем не хуже class.
Оно хуже тем, что длиннее на один символ Те, кому длина не важна, могут использовать typename. Так зачем нужен ещё и struct?