Структура против класса
Сегодня мне было любопытно найти некоторые различия между структурой и классом на С++. Итак, я нашел некоторые отличия:
- В структуре члены по умолчанию являются общедоступными, а private - в классе.
- Наследование в случае структуры является общедоступным по умолчанию, а private в случае класса.
- Классы могут принимать участие в шаблонах, а структуры не могут.
нажмите здесь, чтобы увидеть, что struct не может использоваться вместо класса в случае шаблона.
http://ideone.com/p5G57
template<struct T> void fun(T i)
{
cout<<i<<endl;
}
int main()
{
int i=10;
fun<int>(i);
return 0;
}
Он дает ошибки:
prog.cpp:4: error: ‘struct T’ is not a valid type for a template constant parameter
prog.cpp: In function ‘void fun(T)’:
prog.cpp:4: error: ‘i’ has incomplete type
prog.cpp:4: error: forward declaration of ‘struct T’
prog.cpp: In function ‘int main()’:
prog.cpp:12: error: no matching function for call to ‘fun(int&)’
Однако, если struct заменяется классом, он отлично работает. см. здесь: http://ideone.com/K8bFn
Помимо этих выше различий, когда я заменяю class
на struct
в моем коде, код работает отлично, не внося никаких дальнейших изменений.
Теперь, я хочу знать, Есть ли больше различий, которые мне не хватает, и я должен знать?
Ответы
Ответ 1
Нет другой разницы, , но, которую вы указали не правильно:
Класс может принимать участие в шаблоне, а структуры не могут.
В случае шаблонов ключевое слово class
представляет собой просто синтаксический сахар, это не означает, что тип должен быть фактическим классом. Как правило, программисты предпочитают typename
для базовых типов и class
для классов или структур, но это просто по соглашению.
Кроме этого, вы можете использовать как class
, так и struct
, чтобы специализировать шаблоны.
Ответ 2
Существуют два основных отличия:
-
В отсутствие спецификатора доступа для базы class
, public принимается при объявлении производного класса struct
, а private - при объявлении класса.
-
Член класса, определенного классом ключевого слова, по умолчанию является закрытым. Члены класса, определенные с ключевыми словами struct
или union
, по умолчанию являются общедоступными.
Ответ 3
Структура - это просто класс со всеми общедоступными членами по умолчанию.
В соответствии с языком программирования С++ (3-е изд.), раздел 10.2.8:
По определению структура - это класс, в котором члены по умолчанию общественности; то есть
struct s{ ...
является просто сокращением для
class s { public: ...
Затем он продолжает:
Обычно я предпочитаю использовать struct для классов, которые имеют все данные публично. Я думаю о таких классах, как "не совсем правильные типы, просто данные структуры".
Отредактировано в комментариях:
В разделе 15.3.2 говорится:
Спецификатор доступа для базового класса может быть опущен. В таком случае, база по умолчанию использует частную базу для класса и общедоступной базы для структуры.