Отличие класса от структуры c
Автор Valera Balberov задал вопрос в разделе Другие языки и технологии
Язык С++. Чем отличаются структуры от классов? и получил лучший ответ
Ответ от Andrey[гуру]
И я всё же скажу, что структура это статика, это просто набор данных объединённых общим свойством. В отличии от класса, который описывает методы доступа к данным данным, т. е. содержит динамическую составляющую.
ИМХО это главное идейное отличие. Класс - набор данных и методов для работы с этими данными, а структура просто набор данных.
Ответ от Ёыроежка[гуру]
Тут Девушка-Весна отвечала достаточно подроюно, но ее ответ не совсем корректный. Например, она пишет:
"У классов этого тоже может не быть, но тогда нет возможности использовать объект данного класса "
Этог ничто иное, как ГЛУПОСТЬ! (И, вот такие незнайки еще учат других!: ) ) На самом деле если у класса нет конструктора, то компилятор сам для него генерирует конструктор. Кроме того методы класса совершенно необязательны! Класс может вообще только содержать определения типов данных для использования этих определений в производных классах.
Теперь по существу вопроса. Дело в том, что язык С++ произошел от языка С. Язык С уже имел такой агрегированный тип данных, как структура. Когда родоначальник языка С++ Бъёрн Страуструп решил ввести классы в С, то взял за основу уже готовый тип данных - структуру. Единственное, что он сделал, это с помощью макрокоманд формально закрыл доступ к членам струкутры, и чтобы отличать свою конструкцию от базового типа, то есть структуры, на основе которой он строил классы, он назвал свою конструкцию классом. То есть он внес новую парадигму, новый смысл, используя на уровне кода обычную структуру. То есть концептуально класс это было другое понятие, в которое были вложены другие идеи, а конструктивно, это была обычная структура.
Затем с развитием языка С++ стало уже на уровне самого языка, а не на уровне макрокоманд, делатиься различие между классом и структорой. То есть в С++ появился новый тип данных - класс, который уже имел самостоятельную реализацию, а не был построен на основе структуры.
Как Девушка-Весна правильно заметила в С++ структуры имеют по умолчанию все члены открытыми, тогда как классы имеют по умолчанию все члены класса являются закрытыми. В С++ структуры сохранили те новшества, которые ввел Бъёрн, то есть конструкторы, деструкторы, методы и т. д.
Поэтоу в С++ вы можете использовать структуры как в старом стиле в языке С, так и в новом стиле языка С++.
Поэтому в стиле языка С++ структуры и классы взаимозаменяемы. Часто классы, которые имеют открытые члены данных объявляют как структуры, чтобы лишний раз для этих членов не писать слово public (вы помните, что у классов по умолчанию члены данных имеют доступ private).
Вот и все различие!:)
Тут Девушка-Весна отвечала достаточно подроюно, но ее ответ не совсем корректный. Например, она пишет:
"У классов этого тоже может не быть, но тогда нет возможности использовать объект данного класса "
Этог ничто иное, как ГЛУПОСТЬ! (И, вот такие незнайки еще учат других!: ) ) На самом деле если у класса нет конструктора, то компилятор сам для него генерирует конструктор. Кроме того методы класса совершенно необязательны! Класс может вообще только содержать определения типов данных для использования этих определений в производных классах.
Теперь по существу вопроса. Дело в том, что язык С++ произошел от языка С. Язык С уже имел такой агрегированный тип данных, как структура. Когда родоначальник языка С++ Бъёрн Страуструп решил ввести классы в С, то взял за основу уже готовый тип данных - структуру. Единственное, что он сделал, это с помощью макрокоманд формально закрыл доступ к членам струкутры, и чтобы отличать свою конструкцию от базового типа, то есть структуры, на основе которой он строил классы, он назвал свою конструкцию классом. То есть он внес новую парадигму, новый смысл, используя на уровне кода обычную структуру. То есть концептуально класс это было другое понятие, в которое были вложены другие идеи, а конструктивно, это была обычная структура.
Затем с развитием языка С++ стало уже на уровне самого языка, а не на уровне макрокоманд, делатиься различие между классом и структорой. То есть в С++ появился новый тип данных - класс, который уже имел самостоятельную реализацию, а не был построен на основе структуры.
Как Девушка-Весна правильно заметила в С++ структуры имеют по умолчанию все члены открытыми, тогда как классы имеют по умолчанию все члены класса являются закрытыми. В С++ структуры сохранили те новшества, которые ввел Бъёрн, то есть конструкторы, деструкторы, методы и т. д.
Поэтоу в С++ вы можете использовать структуры как в старом стиле в языке С, так и в новом стиле языка С++.
Поэтому в стиле языка С++ структуры и классы взаимозаменяемы. Часто классы, которые имеют открытые члены данных объявляют как структуры, чтобы лишний раз для этих членов не писать слово public (вы помните, что у классов по умолчанию члены данных имеют доступ private).
Вот и все различие!:)
Ответ от Cooler[гуру]
Классы главным образом отличаются от структур наличием указателя this
Классы главным образом отличаются от структур наличием указателя this
Ответ от Девушка Весна[гуру]
Практически не чем не отличаются 🙂
Своим студентам я говорю, что структуру можно воспринимать как вырожденый клас.. .
НО! если бы совсем отличий не было, то и огород городить не надо было бы :-))
1. Поля структуры ВСЕГДА public, а поля класса по умолчанию private (это правильно с точки зрения принципа инкапсуляции)
2. Как правило (это не означает, что этого не может быть) структуры не имеют конструкторов и методов. У классов этого тоже может не быть, но тогда нет возможности использовать объект данного класса
ну где то так.. . :-))
Практически не чем не отличаются 🙂
Своим студентам я говорю, что структуру можно воспринимать как вырожденый клас.. .
НО! если бы совсем отличий не было, то и огород городить не надо было бы :-))
1. Поля структуры ВСЕГДА public, а поля класса по умолчанию private (это правильно с точки зрения принципа инкапсуляции)
2. Как правило (это не означает, что этого не может быть) структуры не имеют конструкторов и методов. У классов этого тоже может не быть, но тогда нет возможности использовать объект данного класса
ну где то так.. . :-))
Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: Язык С++. Чем отличаются структуры от классов?
спросили в C++ Книги о C++
Чем отличается коренным образом класс от структуры в c#
class C {
public int Value { get; set; }
public C(int value) {
Value = value;
}
подробнее...
Чем отличается коренным образом класс от структуры в c#
class C {
public int Value { get; set; }
public C(int value) {
Value = value;
}
подробнее...
спросили в G элементы
Чем отличается for instance от for example?
at first instance - в первой инстанции
at the instance of - по просьбе
cite an instance -
подробнее...
Чем отличается for instance от for example?
at first instance - в первой инстанции
at the instance of - по просьбе
cite an instance -
подробнее...
спросили в 1648 год
Чем отличается французский абсолютизм от английского в средние века ?
Абсолюти́зм (от лат. absolutos — безусловный) — период в истории Европы, когда существовала
подробнее...
Чем отличается французский абсолютизм от английского в средние века ?
Абсолюти́зм (от лат. absolutos — безусловный) — период в истории Европы, когда существовала
подробнее...
Что такое. Что такое "структура" в программировании и зачем она нужна в с++?
Структура в С или Pascal - составная переменная. Удобна, чтобы иметь общее имя для всех данных,
подробнее...
У сотрудников РОССИЙСКОГО метрополитена существуют знаки отличия, что они обозначают?
Машинисты метро носят форменную одежду. Однако звезды на погонах не воинские звания, а обозначение
подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:
Недавно услышал про такой язык как F#, что это за язык, и есть ли отличия от С++?
Код на языке F# является безопасным в отношении типов, часто бывает более компактным, чем
подробнее...
спросили в 1011 год 138 год
Какие бывают виды галактик?
Галактики - звездные системы, подобные нашей Галактике - Млечному Пути. Галактики имеют различные
подробнее...
Какие бывают виды галактик?
Галактики - звездные системы, подобные нашей Галактике - Млечному Пути. Галактики имеют различные
подробнее...
спросили в Linux software
Что такое Framework, инафига она нужна
Framework — термин, имеющий размытое значение. Обычно используется в программировании, обозначая
подробнее...
Что такое Framework, инафига она нужна
Framework — термин, имеющий размытое значение. Обычно используется в программировании, обозначая
подробнее...
спросили в Интернет Интернете
что такое интернет
что такое Интернет. Здесь существует две стороны - техническая и гуманитарная. С технической точки
подробнее...
что такое интернет
что такое Интернет. Здесь существует две стороны - техническая и гуманитарная. С технической точки
подробнее...
спросили в Java API
Что такое Фреймворк???
Framework — термин, имеющий размытое значение. Обычно используется в программировании, обозначая
подробнее...
Что такое Фреймворк???
Framework — термин, имеющий размытое значение. Обычно используется в программировании, обозначая
подробнее...