Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.82/125: Рейтинг темы: голосов - 125, средняя оценка - 4.82
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206

Отличия между структурами и классами

18.08.2010, 12:38. Показов 28157. Ответов 58
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Объясните пожалуйста, в С++, получается, что структура отличается от класса только тем, что у нее по умолчанию все данные public?
Т.е. наследовать структуры я тоже могу. Тогда как-то непонятен смысл создания двух одинаковых типов объектов, только что с разными названиями.
2
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.08.2010, 12:38
Ответы с готовыми решениями:

Отличия между классами и массивами
Уважаемые программисты объясните пожалуйста Чем отличается массивы от классов????:help::help::help::help::help::help::wall:

Отличия между классами String и StringBuilder
Расскажите пожалуйста про основные отличия между классами String и StringBuilder.

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

58
 Аватар для ViNew
55 / 44 / 5
Регистрация: 16.07.2011
Сообщений: 73
28.07.2011, 10:11
Студворк — интернет-сервис помощи студентам
half-node,
Структура - это набор переменных разного типа без каких либо функций
класс- это набор разного типа переменных + функции обработки переменных этого класса

Добавлено через 3 минуты
half-node, Структура — это совокупность переменных, объединенных под одним именем. С помощью структур удобно размещать в смежных полях связанные между собой элементы информации. Объявление структуры создает шаблон, который можно использовать для создания ее объектов (то есть экземпляров этой структуры). Переменные, из которых состоит структура, называются членами. (Члены структуры еще называются элементами или полями.)

Добавлено через 1 минуту
half-node,
выглядит структура примерно так
C
1
2
3
4
5
6
7
8
struct addr
{
  char name[30];
  char street[40];
  char city[20];
  char state[3];
  unsigned long int zip;
};
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
28.07.2011, 10:14
ViNew, сказали же, что не т формальной разницы между структурой и классом в C++, кроме спецификатора доступа по-умолчанию. И сделано это ради совместимости с языком Си, то есть чтобы сишнйы код компилился компиляторами C++.
Разница исключительно идеалогическая. Кому-то не нравится выделять структуры как сущности с поведением, а только как некий набор данных. Кому-то на это наплевать.

Цитата Сообщение от ViNew Посмотреть сообщение
Структура - это набор переменных разного типа без каких либо функций
Разве в этом коде что-то неправильно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
struct example {
   example(int _x) : x(_x) {
   }
   
   int get_x() const {
      return x;
   }
   
private:
   int x;
};
 
int main() {
   std::cout << example(5).get_x() << std::endl;
   return 0;
}
Цитата Сообщение от ViNew Посмотреть сообщение
без каких либо функций
Цитата Сообщение от ViNew Посмотреть сообщение
+ функции обработки переменных этого класса
Эти "функции" называются методами.
0
 Аватар для ViNew
55 / 44 / 5
Регистрация: 16.07.2011
Сообщений: 73
28.07.2011, 10:15
half-node,
а вот так может выглядеть простой класс

C++
1
2
3
4
5
6
class class_name
 
{ 
   int data_member; // Элемент данных 
   void show_member(int); // Функция-элемент 
};
0
Заблокирован
28.07.2011, 10:27
Цитата Сообщение от ViNew Посмотреть сообщение
а вот так может выглядеть простой класс
а сложный как выглядит? если ты имеешь ввиду что это POD, то спешу огорчить - это не так
0
 Аватар для ViNew
55 / 44 / 5
Регистрация: 16.07.2011
Сообщений: 73
28.07.2011, 11:05
fasked, Код правильный я с тобой согласен, то что многим наплевать , тоже согласен но я думаю сознательные программисты разделяют этих два понятия даже если они имеют почти одинаковые возможности.

Добавлено через 6 минут
LosAngeles, POD- называется структура которая не содержит функции - члены а только члены данные.
0
Заблокирован
28.07.2011, 11:17
Цитата Сообщение от ViNew Посмотреть сообщение
LosAngeles, POD- называется структура которая не содержит функции - члены а только члены данные.
нет...

Добавлено через 3 минуты
хотя в любом случае непонятно почему class_name простой. Первый раз вижу такую классификацию классов на простые и сложные.
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
28.07.2011, 11:25
Цитата Сообщение от ViNew Посмотреть сообщение
fasked, Код правильный я с тобой согласен, то что многим наплевать , тоже согласен но я думаю сознательные программисты разделяют этих два понятия даже если они имеют почти одинаковые возможности.

Добавлено через 6 минут
LosAngeles, POD- называется структура которая не содержит функции - члены а только члены данные.
Нет. Вот контр-пример:
C++
1
struct Str { std::string s; };
Это НЕ POD.
0
Заблокирован
28.07.2011, 11:27
и ещё один
C++
1
2
3
4
5
6
struct class_name
 
{ 
   int data_member; // Элемент данных 
   void show_member(int); // Функция-элемент 
};
POD
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
28.07.2011, 11:34
Цитата Сообщение от LosAngeles Посмотреть сообщение
и ещё один
C++
1
2
3
4
5
6
struct class_name
 
{ 
   int data_member; // Элемент данных 
   void show_member(int); // Функция-элемент 
};
POD
Это - POD. А вот ваше определение POD, которое я видел выше - неверно. Вот что такое POD:
Стандарт [1-3.9] определяет, что объекты встроенных типов относятся к так называемым POD-объектам (Plain Old Data). Кроме встроенных типов к POD-объектам относятся перечисления, указатели, массивы, структуры и объединения (union). Как видим, все типы, изначально определенные в С, относятся к POD-типам. Что касается классов, то POD-классами являются только классы с тривиальным конструктором. Тривиальный конструктор — это конструктор, создаваемый автоматически, и класс при этом должен удовлетворять следующим условиям:
1. Класс не должен содержать виртуальных функций.
2. Все поля в классе должны быть POD-объектами.
3. Если класс является наследником, то базовый класс должен иметь тривиальный конструктор, и наследование не должно быть виртуальным.
На практике это означает, что простой класс-ненаследник без конструкторов и виртуальных функций является POD-классом. В частности, пустой класс является POD-классом. Время жизни POD-объектов определяется так же, как и время жизни объектов встроенных типов.
Это же относится к struct и union
2
Заблокирован
28.07.2011, 11:37
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Это - POD. А вот ваше определение POD, которое я видел выше - неверно
только оно не моё я никаких определений не давал
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
28.07.2011, 11:39
Пардон, это ViNew дал определение...
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
28.07.2011, 11:39
будет ли верным определение: "все что может быть мембером uniona - POD" в рамках стандарта от 2003?
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
28.07.2011, 11:42
Цитата Сообщение от Maxwe11 Посмотреть сообщение
будет ли верным определение: "все что может быть мембером uniona - POD" в рамках стандарта от 2003?
А нетривиальный конструктор? Мы можем его написать.
Кроме того, надо смотреть стандарт, нет ли ограничений на мемберство в unione - я просто не помню.
Дополнение.
Студия 2010:
C++
1
2
3
union a
{ vector<int> A;
};
выдает ошибку: Error 1 error C2621: member 'a::A' of union 'a' has copy constructor
1
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
28.07.2011, 14:45
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
нет ли ограничений на мемберство в unione - я просто не помню.
Кое-что есть:
A union can have member functions (including constructors and destructors), but not virtual (10.3) functions.
An object of a class with a non-trivial constructor (12.1), a non-trivial copy constructor (12.8), a non-trivial destructor (12.4), or a non-trivial copy assignment operator (13.5.3, 12.8) cannot be a member of a union, nor can an array of such objects.
Добавлено через 15 минут
C++0x, правда, добавляет таку возможность:
If a union has a member with a user-defined constructor, copy, or destructor then that special function is deleted; that is, it cannot be used for an object of the union type. This is new.
1
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
28.07.2011, 14:58
asics, ну вот.
Как раз на нетривиальный copy-constructor VC++ 2010 и жаловался. Все правильно!
1
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
28.07.2011, 20:19

Не по теме:

Тему интересно почитать хотя бы из-за того ка "прошаренные" новички на форуме объясняют как истину последней инстанции что такое структура и что такое класс :D Спасибо им за поднятое настроение.


Побуду кепом: автореферентные классы/структуры создаются несколько по другому:
Так в классе один из объектов может быть этого же типа
C++
1
2
3
4
5
class Test
{
...
Test a;
}
а вот в структуре уже можно поместить только указатель на неё же
C++
1
2
3
4
5
struct Test
{
...
*Test a;
}
Но это так, чисто формальности.
0
Заблокирован
28.07.2011, 20:45
Цитата Сообщение от Gepar Посмотреть сообщение
Так в классе один из объектов может быть этого же типа
да ну как это возможно. Рекурсия получается. Мой msvs 2008 не принял это
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
28.07.2011, 20:49
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Gepar Посмотреть сообщение
автореферентные классы/структуры
это что?

Цитата Сообщение от Gepar Посмотреть сообщение
Так в классе один из объектов может быть этого же типа
C++
1
2
3
4
5
class Test
{
...
Test a;
}
с какого перепугу?

Цитата Сообщение от Gepar Посмотреть сообщение
а вот в структуре уже можно поместить только указатель на неё же
C++
1
2
3
4
5
struct Test
{
...
*Test a;
}
это даже не указатель на структуру, а черт знает что

Добавлено через 1 минуту
Цитата Сообщение от CAHTEXHUK Посмотреть сообщение
да ну как это возможно. Рекурсия получается. Мой msvs 2008 не принял это
и не должен, потому что на момент компиляции размер класса Test неопределен

Добавлено через 1 минуту
Цитата Сообщение от Gepar Посмотреть сообщение
Но это так, чисто формальности.
с .NET-ом путаете товарищ!
4
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
28.07.2011, 20:50
CAHTEXHUK, а вот так:
C++
1
2
3
4
5
class Test
{
...
Test *a;
}
Извините, писал простой пример без компилятора и прочего, а в таких случаях вечно что-то забудешь, то точку с запятой то скобки уравновесить, в даном случае я забыл *.
0
Эксперт С++
 Аватар для grizlik78
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
28.07.2011, 20:52
Gepar, тогда в чём отличия?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.07.2011, 20:52

Разница между классами и структурами и другие моменты
Добрый день! Разбираю разницу между классами и структурами, и возник следующий вопрос при создании экземпляров класса и структуры: ...

Отличия между ++value и value++
Все используют по разному, чем эти отличия отличаются друг от друга. Или ничем ?

Отличия между видеокартами
Доброго вечера форумчане! в чем отличия от Radeon R9 280X от R9 280 (без икса) сильно ли они отличаются по производительности?

Отличия между книгами
Добрый день! Решил прикупить себе Искусство программирования Кнута. Так вот... не могу понять в чем отличия серии и...

Отличия между DVD
Задали мне тут вопрос, в чем отличие между двумя этими оптическими носителями, с точки зрения физики, если у них так сильно различаются...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru