Re[6]: Чем отличается структура от класса?
От: viellsky  
Дата: 23.12.16 16:43
Оценка:
Здравствуйте, N. I., Вы писали:

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

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

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

Итого — никакой рациональности в паре "class можно, а struct нельзя" — нет. Видимо просто особенности исторического развития стандарта.
Re[4]: Чем отличается структура от класса?
От: _niko_ Россия  
Дата: 23.12.16 18:01
Оценка: +1 :))) :))
Здравствуйте, RussianFellow, Вы писали:
RF>Что такое POD-type?

Зззабудь это слово, не бери в голову!

PS: Chorkov, по меньше новых слов и терминов плизз
Re[4]: Чем отличается структура от класса?
От: Erop Россия  
Дата: 24.12.16 18:42
Оценка: :)))
Здравствуйте, RussianFellow, Вы писали:

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


Плоские старые данные...
Что-то вроде сплющенных старых пивных банок
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Отредактировано 24.12.2016 18:44 Erop . Предыдущая версия .
Re[2]: Чем отличается структура от класса?
От: Pzz Россия https://github.com/alexpevzner
Дата: 24.12.16 19:15
Оценка:
Здравствуйте, N. I., Вы писали:

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


struct C;
class C;


А что, в C++ так можно?
Re[3]: Чем отличается структура от класса?
От: N. I.  
Дата: 25.12.16 10:39
Оценка:
Pzz:

Pzz>
struct C;
class C;

Pzz>А что, в C++ так можно?

Теоретически можно — стандарт разрешает. Практически при использовании разных ключевых слов для одного класса можно поиметь проблемы с линковкой функций в VC++ из-за того, что он по-разному декорирует имена классов, в зависимости от использования class/struct.
Re[4]: Чем отличается структура от класса?
От: B0FEE664  
Дата: 27.12.16 10:35
Оценка:
Здравствуйте, RussianFellow, Вы писали:

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


Это такой тип, объект которого можно легально скопировать с помощью копирования куска памяти.
И каждый день — без права на ошибку...
Re[4]: Чем отличается структура от класса?
От: uzhas Ниоткуда  
Дата: 27.12.16 12:13
Оценка:
Здравствуйте, N. I., Вы писали:

NI>Pzz:


Pzz>>
struct C;
NI>class C;

Pzz>>А что, в C++ так можно?

NI>Теоретически можно — стандарт разрешает.


мне кажется, что стандарт против такого бардака

7.1.7.3 Elaborated type specifiers [dcl.type.elab]
....
3 The class-key or enum keyword present in the elaborated-type-specifier shall agree in kind with the declaration
to which the name in the elaborated-type-specifier refers. This rule also applies to the form of elaborated-typespecifier
that declares a class-name or friend class since it can be construed as referring to the definition of the
class. Thus, in any elaborated-type-specifier, the enum keyword shall be used to refer to an enumeration (7.2),
the union class-key shall be used to refer to a union (Clause 9), and either the class or struct class-key
shall be used to refer to a class (Clause 9) declared using the class or struct class-key.


9 Classes [class]
1 A class is a type. Its name becomes a class-name (9.1) within its scope.
class-name:
identifier
simple-template-id
Class-specifiers and elaborated-type-specifiers (7.1.7.3) are used to make class-names. An object of a class consists of a (possibly empty) sequence of members and base class objects.

class-specifier:
class-head { member-specificationopt }
class-head:
class-key attribute-specifier-seqopt class-head-name class-virt-specifieropt base-clauseopt
class-key attribute-specifier-seqopt base-clauseopt
class-head-name:
nested-name-specifieropt class-name
class-virt-specifier:
final
class-key:

class
struct
union


то есть маркеры класса class/struct/union не взаимозаменяемы в контексте объявления класса
Re: Чем отличается структура от класса?
От: Икс Россия  
Дата: 27.12.16 12:23
Оценка:
Здравствуйте, RussianFellow, Вы писали:

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


Помимо видимости членов по умолчанию, поля структуры могут быть инициализированны в момент об'явления (инстанса).
Например:

struct Foo { int poo; } boo = { 1 };
Отредактировано 27.12.2016 12:35 Икс . Предыдущая версия .
Re[2]: Чем отличается структура от класса?
От: alzt  
Дата: 27.12.16 12:59
Оценка:
Здравствуйте, anatolym, Вы писали:

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


Наоборот классы не нужны, достаточно структур.
Re[2]: Чем отличается структура от класса?
От: alzt  
Дата: 27.12.16 13:01
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>Завали интервьюера на собеседовании. ))


А чем слово typename отличается от слова class в С++?
Re[3]: Чем отличается структура от класса?
От: Evgeny.Panasyuk Россия  
Дата: 27.12.16 16:13
Оценка: +1
Здравствуйте, alzt, Вы писали:

AWW>>Завали интервьюера на собеседовании. ))

A>А чем слово typename отличается от слова class в С++?

Через typename класс не объявишь.
Раньше в шаблонных шаблонных параметрах (template template parameter) можно было использовать только class, начиная с C++17 теперь можно и typename.
Re[2]: Чем отличается структура от класса?
От: _niko_ Россия  
Дата: 27.12.16 17:54
Оценка:
Здравствуйте, Икс, Вы писали:
Икс>Помимо видимости членов по умолчанию, поля структуры могут быть инициализированны в момент об'явления (инстанса).
Икс>Например:
Икс>struct Foo { int poo; } boo = { 1 };

  class Bar { public: int poo; } bar = { 3 };

// http://ideone.com/NPMZHC

#include <iostream>
 
int main()
{
    struct Foo { int poo; } foo = { 2 };
    class  Bar { public: int poo; } bar = { 3 };
 
    std::cout << foo.poo << std::endl;
    std::cout << bar.poo << std::endl;
 
    return 0;
}
Re[5]: Чем отличается структура от класса?
От: N. I.  
Дата: 27.12.16 19:12
Оценка: +1
uzhas:

U>мне кажется, что стандарт против такого бардака

U>

U>7.1.7.3 Elaborated type specifiers [dcl.type.elab]
U>....
U>3 The class-key or enum keyword present in the elaborated-type-specifier shall agree in kind with the declaration


Kind в случае с class и struct один и тот же — это non-union class.

U>the union class-key shall be used to refer to a union (Clause 9), and either the class or struct class-key

U>shall be used to refer to a class (Clause 9) declared using the class or struct class-key.

Заметь, что union обособляется от class и struct, а class и struct друг от друга — нет (тут не сказано "declared using the class or struct class-key respectively").
Re[6]: Чем отличается структура от класса?
От: night beast СССР  
Дата: 27.12.16 19:15
Оценка:
Здравствуйте, N. I., Вы писали:

U>>мне кажется, что стандарт против такого бардака

U>>

U>>7.1.7.3 Elaborated type specifiers [dcl.type.elab]
U>>....
U>>3 The class-key or enum keyword present in the elaborated-type-specifier shall agree in kind with the declaration


NI>Kind в случае с class и struct один и тот же — это non-union class.


U>>the union class-key shall be used to refer to a union (Clause 9), and either the class or struct class-key

U>>shall be used to refer to a class (Clause 9) declared using the class or struct class-key.

NI>Заметь, что union обособляется от class и struct, а class и struct друг от друга — нет (тут не сказано "declared using the class or struct class-key respectively").


а почему студия на такое ругается варнингами?

struct test;
class test
{
};
Отредактировано 27.12.2016 19:19 night beast . Предыдущая версия .
Re[7]: Чем отличается структура от класса?
От: N. I.  
Дата: 27.12.16 19:56
Оценка: 8 (2)
night beast:

NB>а почему студия на такое ругается варнингами?


Видимо, из-за того, что её компилятор не умеет правильно декорировать имена классов (как было сказано выше). Jonathan Wakely из комитета по стандартизации C++ того же мнения:

This is a really stupid warning that only exists because the MS compiler has (or had) a bug that treats 'struct' and 'class' differently. GCC (and Clang) correctly implement the C++ standard which says it doesn't matter.


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61339#c1
Re[6]: Чем отличается структура от класса?
От: uzhas Ниоткуда  
Дата: 28.12.16 08:48
Оценка:
Здравствуйте, N. I., Вы писали:

NI>тут не сказано "declared using the class or struct class-key respectively"


я понял именно в таком смысле =\
на SO уже пережевали : https://stackoverflow.com/questions/31559264/interchanging-class-struct-keyword-in-c
Re[3]: Чем отличается структура от класса?
От: Икс Россия  
Дата: 29.12.16 09:31
Оценка:
Здравствуйте, _niko_, Вы писали:

__>Здравствуйте, Икс, Вы писали:

Икс>>Помимо видимости членов по умолчанию, поля структуры могут быть инициализированны в момент об'явления (инстанса).
Икс>>Например:
__>
Икс>>struct Foo { int poo; } boo = { 1 };
__>

__>
  class Bar { public: int poo; } bar = { 3 };
__>

__>// http://ideone.com/NPMZHC

__>#include <iostream>
 
__>int main()
__>{
__>    struct Foo { int poo; } foo = { 2 };
__>    class  Bar { public: int poo; } bar = { 3 };
 
__>    std::cout << foo.poo << std::endl;
__>    std::cout << bar.poo << std::endl;
 
__>    return 0;
__>}
__>



Эх, точно, посыпал голову пеплом, я пробовал без "public:" — не скомпилировалось
Re: Чем отличается структура от класса?
От: rg45 СССР  
Дата: 30.12.16 06:34
Оценка: 6 (1) +2
Здравствуйте, RussianFellow, Вы писали:

RF>В ранних стандартах C++ структура определялась как набор данных, а класс--как набор данных, функций (методов), констукторов, деструкторов...


В каких это "ранних"? Смотрим стандарт 1998 года:

9/4
A structure is a class defined with the classkey struct; its members and base classes (clause 10) are public by default (clause 11)...


Ты начал бы уже что-то читать самостоятельно. Форум может помочь разобраться в чем-то, что непонятно, но он не может заменить образования и самообразования.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[4]: Чем отличается структура от класса?
От: Burbulis1978  
Дата: 07.04.17 16:57
Оценка:
Здравствуйте, RussianFellow, Вы писали:

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


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

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

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

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

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


RF>(Учебники по C++ я покупал в 90-ые года и в начале 2000-ых годов).


Plain Of Data
Re[5]: Чем отличается структура от класса?
От: Кодт Россия  
Дата: 07.04.17 17:52
Оценка:
Здравствуйте, Burbulis1978, Вы писали:

B>Plain Of Data


Plain Old Data. "Старые добрые данные"
Перекуём баги на фичи!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.