Структура против класса - программирование
Подтвердить что ты не робот

Структура против класса

Сегодня мне было любопытно найти некоторые различия между структурой и классом на С++. Итак, я нашел некоторые отличия:

  • В структуре члены по умолчанию являются общедоступными, а 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 в моем коде, код работает отлично, не внося никаких дальнейших изменений.

Теперь, я хочу знать, Есть ли больше различий, которые мне не хватает, и я должен знать?

4b9b3361

Ответ 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 говорится:

Спецификатор доступа для базового класса может быть опущен. В таком случае, база по умолчанию использует частную базу для класса и общедоступной базы для структуры.