struct C++

Все, что вы хотели знать о программизме, но боялись спросить.
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

struct C++

Сообщение vg »

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

Приведите примеры, когда задачу можно решить только при помощи объявлений class.

ПС. Сам никогда даже не задумывался про это. :lol:
Аватара пользователя
Sea-urchin
Завсегдатай
Сообщения: 462
Зарегистрирован: 18 окт 2003, 22:20
Откуда: Vancouver

Сообщение Sea-urchin »

Не знаю, как с C++. А в C# классы являются ссылочным типом, переменные хранятся в куче, а структуры - тип значений, хранятся в стеке. Подозреваю, что и в С++ тоже самое.
Аватара пользователя
Проф. Преображенский
Графоман
Сообщения: 20276
Зарегистрирован: 08 ноя 2006, 11:10

Re: struct C++

Сообщение Проф. Преображенский »

vg писал(а):... чем отличается от class, кроме того, что по умолчанию мемберы в одном случае паблик, а в другом приват. Если только в этом и вся разница, то почему ж тогда не использовать везде и всюду struct?

Приведите примеры, когда задачу можно решить только при помощи объявлений class.

ПС. Сам никогда даже не задумывался про это. :lol:
Нет таких задач.
Аватара пользователя
Проф. Преображенский
Графоман
Сообщения: 20276
Зарегистрирован: 08 ноя 2006, 11:10

Сообщение Проф. Преображенский »

Sea-urchin писал(а):Не знаю, как с C++. А в C# классы являются ссылочным типом, переменные хранятся в куче, а структуры - тип значений, хранятся в стеке. Подозреваю, что и в С++ тоже самое.
Сдается мне, что Си шарп - это переодетый вижуал васик. :?
Аватара пользователя
Earl Grey
Маньяк
Сообщения: 2893
Зарегистрирован: 22 фев 2005, 15:07

Re: struct C++

Сообщение Earl Grey »

runner писал(а):
vg писал(а):... чем отличается от class, кроме того, что по умолчанию мемберы в одном случае паблик, а в другом приват. Если только в этом и вся разница, то почему ж тогда не использовать везде и всюду struct?

Приведите примеры, когда задачу можно решить только при помощи объявлений class.

ПС. Сам никогда даже не задумывался про это. :lol:
Нет таких задач.
Ну почему же, а как насчет задачи "Создать КЛАСС, инкапсулирующий ..."? :) :)
Аватара пользователя
Earl Grey
Маньяк
Сообщения: 2893
Зарегистрирован: 22 фев 2005, 15:07

Сообщение Earl Grey »

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

В чем же суть "переодевания" по вашему?
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

Пока неудовлетворён таки я. Повторяю, речь идёт исключительно о стандарте С++.

ПС. Про агрегацию, включение (выше были замечания у У.У.) - работает это, работает :lol:
Аватара пользователя
dima
Житель
Сообщения: 690
Зарегистрирован: 19 фев 2003, 19:26
Откуда: Хабаровск->Toronto

Re: struct C++

Сообщение dima »

vg писал(а):... чем отличается от class, кроме того, что по умолчанию мемберы в одном случае паблик, а в другом приват. Если только в этом и вся разница, то почему ж тогда не использовать везде и всюду struct?

Приведите примеры, когда задачу можно решить только при помощи объявлений class.

ПС. Сам никогда даже не задумывался про это. :lol:
Например использование слова 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;} - компилироваться не будет
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

dima,
Very good :lol:
Аватара пользователя
Lepsik
Житель
Сообщения: 522
Зарегистрирован: 17 фев 2003, 18:34
Откуда: Berlin
Контактная информация:

Сообщение Lepsik »

затo вот так можно

Код: Выделить всё

template <class T>
struct CMeyersSinglton
{
	static T& GetInstance()
	{
		static T obj;
		return obj;
	}
};

Vovchik
Маньяк
Сообщения: 2841
Зарегистрирован: 20 фев 2003, 09:15
Откуда: Vancouver

Re: struct C++

Сообщение Vovchik »

vg писал(а):... чем отличается от class, кроме того, что по умолчанию мемберы в одном случае паблик, а в другом приват. Если только в этом и вся разница, то почему ж тогда не использовать везде и всюду struct?

Приведите примеры, когда задачу можно решить только при помощи объявлений class.

ПС. Сам никогда даже не задумывался про это. :lol:
Классы и вообще ООП придумали не для решения каких то там задач а для автоматизации процесса программирования. Чтоб значить заместо 10 секарей с верхним оьразованием нанять одного 2 секарей дезайнеров и 8 идиотов. С таким же успехом можно поставить вопрос зачем нужен язык С ежели все можно решить на каком нить Ассемблере?
Аватара пользователя
ajkj3em
Маньяк
Сообщения: 2063
Зарегистрирован: 12 ноя 2006, 06:53

Re: struct C++

Сообщение 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.
...
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

Вопрос не бы про полезность C++. Вопрос (прикол) про то, что во многих ситуациях struct ведёт себя аналогично class (и инкасуляция и наследование с полиморьфизьмом тоже) :wink:. Такой вопрос могут задать на интервью. Самый грамотный ответ для интервью, на мой взгляд, у dima-ы.
MaskedRhyme
Пользователь
Сообщения: 57
Зарегистрирован: 18 апр 2005, 03:06

Сообщение MaskedRhyme »

Правильный ответ такой. :) Вообще ничем не отличается, кроме того, что по умолчанию у struct'а спецификатор доступа public. Public -- это для совместимости с C.

dima был не совсем корректен в своем примере (или намеренно слукавил). Там ключевое слово "class" используется для описания типа параметра шаблона. Чтобы не было путаницы лучше в таких случаях писать typename:

template<typename XXX> int func(XXX xxx) { ... }

А в вопросе, насколько я понимаю, имеется в виду объявление нового типа.
Аватара пользователя
Lepsik
Житель
Сообщения: 522
Зарегистрирован: 17 фев 2003, 18:34
Откуда: Berlin
Контактная информация:

Сообщение Lepsik »

если пошла такая пьянка то и так можно

Код: Выделить всё

template <class A, class B>
union MegaCast
{
A* a;
B* b;
};
Ответить