Andrey
Мыслитель
(7050)
14 лет назад
И я всё же скажу, что структура это статика, это просто набор данных объединённых общим свойством. В отличии от класса, который описывает методы доступа к данным данным, т. е. содержит динамическую составляющую.
ИМХО это главное идейное отличие. Класс - набор данных и методов для работы с этими данными, а структура просто набор данных.
Девушка ВеснаМудрец (17777)
14 лет назад
Согласна! но ведь об этом я и писала!
о том что класс без методов - не класс,как таковой.
а все приведенные ухищрения, как не использовать методы - это только ухищрения :-))
Девушка Весна
Мудрец
(17777)
14 лет назад
Практически не чем не отличаются :-)
Своим студентам я говорю, что структуру можно воспринимать как вырожденый клас.. .
НО! если бы совсем отличий не было, то и огород городить не надо было бы :-))
1. Поля структуры ВСЕГДА public, а поля класса по умолчанию private (это правильно с точки зрения принципа инкапсуляции)
2. Как правило (это не означает, что этого не может быть) структуры не имеют конструкторов и методов. У классов этого тоже может не быть, но тогда нет возможности использовать объект данного класса
ну где то так.. . :-))
AndreyМыслитель (7050)
14 лет назад
Извините, переборщил, а удалить коммент немогу. Пока ваш ответ лучший, но в облаках моего склероза гуляют какие-то более красивые слова.
Valera BalberovГуру (4651)
14 лет назад
2. Как правило (это не означает, что этого не может быть) структуры не имеют конструкторов и методов. У классов этого тоже может не быть, но тогда нет возможности использовать объект данного класса
Нет возможности, или не имеет смісла использовать, как класс???
Valera BalberovГуру (4651)
14 лет назад
Если нет возможности использовать объекты этого класса, тогда для чего он нужен.
Тогда как это? Класс может существовать, а использовать его нельзя????
СыроежкаОракул (79624)
14 лет назад
Да, барышня...,вы переборщили с пунктом 2!:) Цитирую: "2. Как правило (это не означает, что этого не может быть) структуры не имеют конструкторов и методов. У классов этого тоже может не быть, но тогда нет возможности использовать объект данного класса "
На самом деле если у класса не объявлены конструкторы, то компилятор сам их создает по умолчанию, поэтому на самом деле ничто не препятствует пользованию классов без конструкторов! Вы же сами написали, что структуры подобны классам, а это значит, что и для структур и для классво компилятор сам генерирует конструкторы, конструкторы копирования и операторы присваивания. Просто они тогда приобретают вид почленного копирования образова памяти.
Cooler
Мастер
(1063)
14 лет назад
Классы главным образом отличаются от структур наличием указателя this
Valera BalberovГуру (4651)
14 лет назад
this -- Что это за указатель? Какие у него преимущества? Что можно реализовать с его помощью?
СыроежкаОракул (79624)
14 лет назад
Очередная глупость! Если структура имеет члены-функции, то они также получают в качестве скрытого первого параметра указатель на объект, который называется this! Учи С++, сынок!:)
Сыроежка
Оракул
(79624)
14 лет назад
Тут Девушка-Весна отвечала достаточно подроюно, но ее ответ не совсем корректный. Например, она пишет:
"У классов этого тоже может не быть, но тогда нет возможности использовать объект данного класса "
Этог ничто иное, как ГЛУПОСТЬ! (И, вот такие незнайки еще учат других!: ) ) На самом деле если у класса нет конструктора, то компилятор сам для него генерирует конструктор. Кроме того методы класса совершенно необязательны! Класс может вообще только содержать определения типов данных для использования этих определений в производных классах.
Теперь по существу вопроса. Дело в том, что язык С++ произошел от языка С. Язык С уже имел такой агрегированный тип данных, как структура. Когда родоначальник языка С++ Бъёрн Страуструп решил ввести классы в С, то взял за основу уже готовый тип данных - структуру. Единственное, что он сделал, это с помощью макрокоманд формально закрыл доступ к членам струкутры, и чтобы отличать свою конструкцию от базового типа, то есть структуры, на основе которой он строил классы, он назвал свою конструкцию классом. То есть он внес новую парадигму, новый смысл, используя на уровне кода обычную структуру. То есть концептуально класс это было другое понятие, в которое были вложены другие идеи, а конструктивно, это была обычная структура.
Затем с развитием языка С++ стало уже на уровне самого языка, а не на уровне макрокоманд, делатиься различие между классом и структорой. То есть в С++ появился новый тип данных - класс, который уже имел самостоятельную реализацию, а не был построен на основе структуры.
Как Девушка-Весна правильно заметила в С++ структуры имеют по умолчанию все члены открытыми, тогда как классы имеют по умолчанию все члены класса являются закрытыми. В С++ структуры сохранили те новшества, которые ввел Бъёрн, то есть конструкторы, деструкторы, методы и т. д.
Поэтоу в С++ вы можете использовать структуры как в старом стиле в языке С, так и в новом стиле языка С++.
Поэтому в стиле языка С++ структуры и классы взаимозаменяемы. Часто классы, которые имеют открытые члены данных объявляют как структуры, чтобы лишний раз для этих членов не писать слово public (вы помните, что у классов по умолчанию члены данных имеют доступ private).
Вот и все различие!:)
Девушка ВеснаМудрец (17777)
14 лет назад
господин, Сыроежка!
о том какие учат придержите свой язык (цитата: И, вот такие незнайки еще учат других!:) )
об автоматических конструкторах, о чисто виртуальных методах и об абстрактных классах я знаю поболее Вашего.
Умничать выдирая цитаты из книги Страуструпа это еще не значит объяснить.
вот Вам пример, о котором я вела речь и если у вас получиться его как либо использовать (именно ИСПОЛЬЗОВАТЬ, а не объявить объект класса), то я сниму перед вами шляпу, хотя и не ношу ее.
#include < iostream >
using namespace std;
class TEST
{
int a;
}
int main()
{
TEST t;
}
ва вот теперь предлагаю показать КАК это можно использовать. А ведь с точки зрения синтаксиса ВСЕ правильно.