Страница 1 из 2
struct C++
Добавлено: 28 фев 2005, 19:42
vg
... чем отличается от class, кроме того, что по умолчанию мемберы в одном случае паблик, а в другом приват. Если только в этом и вся разница, то почему ж тогда не использовать везде и всюду struct?
Приведите примеры, когда задачу можно решить только при помощи объявлений class.
ПС. Сам никогда даже не задумывался про это.

Добавлено: 28 фев 2005, 20:27
Sea-urchin
Не знаю, как с C++. А в C# классы являются ссылочным типом, переменные хранятся в куче, а структуры - тип значений, хранятся в стеке. Подозреваю, что и в С++ тоже самое.
Re: struct C++
Добавлено: 28 фев 2005, 21:52
Проф. Преображенский
vg писал(а):... чем отличается от class, кроме того, что по умолчанию мемберы в одном случае паблик, а в другом приват. Если только в этом и вся разница, то почему ж тогда не использовать везде и всюду struct?
Приведите примеры, когда задачу можно решить только при помощи объявлений class.
ПС. Сам никогда даже не задумывался про это.

Нет таких задач.
Добавлено: 28 фев 2005, 22:04
Проф. Преображенский
Sea-urchin писал(а):Не знаю, как с C++. А в C# классы являются ссылочным типом, переменные хранятся в куче, а структуры - тип значений, хранятся в стеке. Подозреваю, что и в С++ тоже самое.
Сдается мне, что Си шарп - это переодетый вижуал васик.

Re: struct C++
Добавлено: 28 фев 2005, 22:39
Earl Grey
runner писал(а):vg писал(а):... чем отличается от class, кроме того, что по умолчанию мемберы в одном случае паблик, а в другом приват. Если только в этом и вся разница, то почему ж тогда не использовать везде и всюду struct?
Приведите примеры, когда задачу можно решить только при помощи объявлений class.
ПС. Сам никогда даже не задумывался про это.

Нет таких задач.
Ну почему же, а как насчет задачи "Создать КЛАСС, инкапсулирующий ..."?

Добавлено: 28 фев 2005, 22:43
Earl Grey
runner писал(а):Sea-urchin писал(а):Не знаю, как с C++. А в C# классы являются ссылочным типом, переменные хранятся в куче, а структуры - тип значений, хранятся в стеке. Подозреваю, что и в С++ тоже самое.
Сдается мне, что Си шарп - это переодетый вижуал васик.

Наверное надо больше учить матчасть, тогда и мнение может измениться.
В чем же суть "переодевания" по вашему?
Добавлено: 01 мар 2005, 03:35
vg
Пока неудовлетворён таки я. Повторяю, речь идёт исключительно о стандарте С++.
ПС. Про агрегацию, включение (выше были замечания у У.У.) - работает это, работает

Re: struct C++
Добавлено: 01 мар 2005, 06:27
dima
vg писал(а):... чем отличается от class, кроме того, что по умолчанию мемберы в одном случае паблик, а в другом приват. Если только в этом и вся разница, то почему ж тогда не использовать везде и всюду struct?
Приведите примеры, когда задачу можно решить только при помощи объявлений class.
ПС. Сам никогда даже не задумывался про это.

Например использование слова class в шаблоне.
template <class T> T min( T a, T b ) { return ( a < b ) ? a : b;}
template <
struct T> T min( T a, T b ) { return ( a < b ) ? a : b;} - компилироваться не будет
Добавлено: 01 мар 2005, 06:59
vg
dima,
Very good

Добавлено: 24 мар 2005, 06:47
Lepsik
затo вот так можно
Код: Выделить всё
template <class T>
struct CMeyersSinglton
{
static T& GetInstance()
{
static T obj;
return obj;
}
};
Re: struct C++
Добавлено: 24 мар 2005, 10:42
Vovchik
vg писал(а):... чем отличается от class, кроме того, что по умолчанию мемберы в одном случае паблик, а в другом приват. Если только в этом и вся разница, то почему ж тогда не использовать везде и всюду struct?
Приведите примеры, когда задачу можно решить только при помощи объявлений class.
ПС. Сам никогда даже не задумывался про это.

Классы и вообще ООП придумали не для решения каких то там задач а для автоматизации процесса программирования. Чтоб значить заместо 10 секарей с верхним оьразованием нанять одного 2 секарей дезайнеров и 8 идиотов. С таким же успехом можно поставить вопрос зачем нужен язык С ежели все можно решить на каком нить Ассемблере?
Re: struct C++
Добавлено: 25 мар 2005, 14:34
ajkj3em
позволю себе процитировать классический труд по сходной тематике -
...
# Real Programmers do List Processing in FORTRAN.
# Real Programmers do String Manipulation in FORTRAN.
# Real Programmers do Accounting (if they do it at all) in FORTRAN.
# Real Programmers do Artificial Intelligence programs in FORTRAN.
# If you can't do it in FORTRAN, do it in assembly language.
# If you can't do it in assembly language, it isn't worth doing.
...
Добавлено: 25 мар 2005, 15:15
vg
Вопрос не бы про полезность C++. Вопрос (прикол) про то, что во многих ситуациях struct ведёт себя аналогично class (и инкасуляция и наследование с полиморьфизьмом тоже)

. Такой вопрос могут задать на интервью. Самый грамотный ответ для интервью, на мой взгляд, у dima-ы.
Добавлено: 18 апр 2005, 03:14
MaskedRhyme
Правильный ответ такой.

Вообще ничем не отличается, кроме того, что по умолчанию у struct'а спецификатор доступа public. Public -- это для совместимости с C.
dima был не совсем корректен в своем примере (или намеренно слукавил). Там ключевое слово "class" используется для описания
типа параметра шаблона. Чтобы не было путаницы лучше в таких случаях писать typename:
template<typename XXX> int func(XXX xxx) { ... }
А в вопросе, насколько я понимаю, имеется в виду объявление нового типа.
Добавлено: 21 апр 2005, 06:27
Lepsik
если пошла такая пьянка то и так можно
Код: Выделить всё
template <class A, class B>
union MegaCast
{
A* a;
B* b;
};