Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Язык С++. Чем отличаются структуры от классов?

Valera Balberov Гуру (4651), закрыт 14 лет назад
Пожалуйста объясните, более доходчиво и профессионально.
Лучший ответ
Andrey Мыслитель (7050) 14 лет назад
И я всё же скажу, что структура это статика, это просто набор данных объединённых общим свойством. В отличии от класса, который описывает методы доступа к данным данным, т. е. содержит динамическую составляющую.

ИМХО это главное идейное отличие. Класс - набор данных и методов для работы с этими данными, а структура просто набор данных.
Девушка ВеснаМудрец (17777) 14 лет назад
Согласна! но ведь об этом я и писала!
о том что класс без методов - не класс,как таковой.
а все приведенные ухищрения, как не использовать методы - это только ухищрения :-))
Остальные ответы
Девушка Весна Мудрец (17777) 14 лет назад
Практически не чем не отличаются :-)
Своим студентам я говорю, что структуру можно воспринимать как вырожденый клас.. .
НО! если бы совсем отличий не было, то и огород городить не надо было бы :-))
1. Поля структуры ВСЕГДА public, а поля класса по умолчанию private (это правильно с точки зрения принципа инкапсуляции)
2. Как правило (это не означает, что этого не может быть) структуры не имеют конструкторов и методов. У классов этого тоже может не быть, но тогда нет возможности использовать объект данного класса

ну где то так.. . :-))
AndreyМыслитель (7050) 14 лет назад
Мне жалко ваших студентов
AndreyМыслитель (7050) 14 лет назад
Извините, переборщил, а удалить коммент немогу. Пока ваш ответ лучший, но в облаках моего склероза гуляют какие-то более красивые слова.
Девушка Весна Мудрец (17777) "спасибо" за +1 ... Если Вы считаете мой ответ неверным, то ответь правильно! А мне писать здесь научные трактаты, со ссылками на источники и заумными фразами и обширными примерами лень... Ответ должен быть таким, чтобы человек саму суть понял, а "воды" из умных слов и в толстых книгах можно прочитать...
Valera BalberovГуру (4651) 14 лет назад
2. Как правило (это не означает, что этого не может быть) структуры не имеют конструкторов и методов. У классов этого тоже может не быть, но тогда нет возможности использовать объект данного класса

Нет возможности, или не имеет смісла использовать, как класс???
Valera BalberovГуру (4651) 14 лет назад
Если нет возможности использовать объекты этого класса, тогда для чего он нужен.
Тогда как это? Класс может существовать, а использовать его нельзя????
Девушка Весна Мудрец (17777) Вы спросили в чем отличие :-)) я Вам привела пример. Понятно, что такой класс никому не нужен....
СыроежкаОракул (79624) 14 лет назад
Да, барышня...,вы переборщили с пунктом 2!:) Цитирую: "2. Как правило (это не означает, что этого не может быть) структуры не имеют конструкторов и методов. У классов этого тоже может не быть, но тогда нет возможности использовать объект данного класса "
На самом деле если у класса не объявлены конструкторы, то компилятор сам их создает по умолчанию, поэтому на самом деле ничто не препятствует пользованию классов без конструкторов! Вы же сами написали, что структуры подобны классам, а это значит, что и для структур и для классво компилятор сам генерирует конструкторы, конструкторы копирования и операторы присваивания. Просто они тогда приобретают вид почленного копирования образова памяти.
Cooler Мастер (1063) 14 лет назад
Классы главным образом отличаются от структур наличием указателя this
Valera BalberovГуру (4651) 14 лет назад
this -- Что это за указатель? Какие у него преимущества? Что можно реализовать с его помощью?
СыроежкаОракул (79624) 14 лет назад
Очередная глупость! Если структура имеет члены-функции, то они также получают в качестве скрытого первого параметра указатель на объект, который называется this! Учи С++, сынок!:)
Сыроежка Оракул (79624) 14 лет назад
Тут Девушка-Весна отвечала достаточно подроюно, но ее ответ не совсем корректный. Например, она пишет:
"У классов этого тоже может не быть, но тогда нет возможности использовать объект данного класса "

Этог ничто иное, как ГЛУПОСТЬ! (И, вот такие незнайки еще учат других!: ) ) На самом деле если у класса нет конструктора, то компилятор сам для него генерирует конструктор. Кроме того методы класса совершенно необязательны! Класс может вообще только содержать определения типов данных для использования этих определений в производных классах.

Теперь по существу вопроса. Дело в том, что язык С++ произошел от языка С. Язык С уже имел такой агрегированный тип данных, как структура. Когда родоначальник языка С++ Бъёрн Страуструп решил ввести классы в С, то взял за основу уже готовый тип данных - структуру. Единственное, что он сделал, это с помощью макрокоманд формально закрыл доступ к членам струкутры, и чтобы отличать свою конструкцию от базового типа, то есть структуры, на основе которой он строил классы, он назвал свою конструкцию классом. То есть он внес новую парадигму, новый смысл, используя на уровне кода обычную структуру. То есть концептуально класс это было другое понятие, в которое были вложены другие идеи, а конструктивно, это была обычная структура.
Затем с развитием языка С++ стало уже на уровне самого языка, а не на уровне макрокоманд, делатиься различие между классом и структорой. То есть в С++ появился новый тип данных - класс, который уже имел самостоятельную реализацию, а не был построен на основе структуры.
Как Девушка-Весна правильно заметила в С++ структуры имеют по умолчанию все члены открытыми, тогда как классы имеют по умолчанию все члены класса являются закрытыми. В С++ структуры сохранили те новшества, которые ввел Бъёрн, то есть конструкторы, деструкторы, методы и т. д.
Поэтоу в С++ вы можете использовать структуры как в старом стиле в языке С, так и в новом стиле языка С++.
Поэтому в стиле языка С++ структуры и классы взаимозаменяемы. Часто классы, которые имеют открытые члены данных объявляют как структуры, чтобы лишний раз для этих членов не писать слово public (вы помните, что у классов по умолчанию члены данных имеют доступ private).
Вот и все различие!:)
Valera BalberovГуру (4651) 14 лет назад
Получается в структуре могут быть методы и функции?
Сыроежка Оракул (79624) Методы и функции в данном контексте это одно и тоже. Все это называется членами-функциями класса. И структуры могут иметь любые члены-функции, или, как вы говорите, методы, как и классы. В этом контексте они полностью взаимозаменямы. Разница лишь в методе доступа по умолчанию. У структур он открытый, а у классов - закрытый.
Девушка ВеснаМудрец (17777) 14 лет назад
господин, Сыроежка!
о том какие учат придержите свой язык (цитата: И, вот такие незнайки еще учат других!:) )

об автоматических конструкторах, о чисто виртуальных методах и об абстрактных классах я знаю поболее Вашего.
Умничать выдирая цитаты из книги Страуструпа это еще не значит объяснить.

вот Вам пример, о котором я вела речь и если у вас получиться его как либо использовать (именно ИСПОЛЬЗОВАТЬ, а не объявить объект класса), то я сниму перед вами шляпу, хотя и не ношу ее.

#include < iostream >
using namespace std;
class TEST
{
int a;
}

int main()
{
TEST t;
}

ва вот теперь предлагаю показать КАК это можно использовать. А ведь с точки зрения синтаксиса ВСЕ правильно.
Сыроежка Оракул (79624) Барышня, но зачем так упорно демонстрировать свое полное невежество в языке С++?! Вы говорили, что если нет конструкторов, то нельзя использовать класс. Нет конструктора и метод доступа к сленам класса - это разщные вещи! Итак, отвечаю по существу. Вам достаточно включить слово public перед int a; в классе и вы можете создавать и работать с этим классом! Но самое забавное, а затем вы в свой пример включили заголовок <iostream>??? Итак, показываю, как это работает class TEST { public: int a; } int main() { TEST t; t.a = 10; } Вы довольны, невежа?
Mr Buravchik Знаток (376) 1 год назад
Спасибо, достойный ответ!
Похожие вопросы