Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 108, средняя оценка - 4.98
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
#1

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

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

Объясните пожалуйста, в С++, получается, что структура отличается от класса только тем, что у нее по умолчанию все данные public?
Т.е. наследовать структуры я тоже могу. Тогда как-то непонятен смысл создания двух одинаковых типов объектов, только что с разными названиями.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.08.2010, 12:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отличия между структурами и классами (C++):

отличия между static и auto переменными - C++
Объясните пожалуйста чем отличаются переменные static и auto? Если можно покажите их отличие в простом примере.

Объясните отличия между двумя кодами - C++
Всем привет ! Чем отличается такой код for(...){ ... ... } от такого for(...)

В чем отличия между union и struct? - C++
Здравствуйте! Вопрос в названии темы

В чем отличия между выражением (expression) и оперетором (statement)? - C++
Здравствуйте, скажите пожалуйста в чем отличия между выражением и оператором? Если x=100 это выражение, то x=100; оператор? Тогда...

Взаимодействие между классами - C++
Суть проблемы такова: в одном файле classy.h объявлено несколько классов (classcontrol, class1, class2,class3). Необходимо сделать так,...

Взаимодействие между классами - C++
При попытке создать указатель на объект класса в public секции другого класса из которого будет обращение к его методу... Cook *cok ...

58
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
18.08.2010, 17:28 #16
Цитата Сообщение от half-node Посмотреть сообщение
А зачем пользоваться типом struct, если есть эквивалентный class?
Объективных причин нет. Не хочешь - не пользуйся. Просто для многих (да и для меня то же) привычней делать так, как сказал CyBOSSeR
0
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
18.08.2010, 17:31  [ТС] #17
Цитата Сообщение от Nameless One Посмотреть сообщение
Объективных причин нет. Не хочешь - не пользуйся. Просто для многих (да и для меня то же) привычней делать так, как сказал CyBOSSeR
Ну да, мой учебник тоже об этом намекает. Просто хотелось разобраться что к чему.
0
Andrew_Lvov
Эксперт С++
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
19.08.2010, 17:52 #18
Цитата Сообщение от half-node Посмотреть сообщение
Ну да, мой учебник тоже об этом намекает. Просто хотелось разобраться что к чему.
Структура отличается от класса спецификатором доступа по умолчанию да.
Не только в обьявлениях внутренных членов, но и при наследовании.
В остальном - абсолютно идентичны (в С++ )
Смысл закрытости по умолчанию в том, что бы дизайнер на автомате не открывал всевозможные данные, а предоставлял интерфейс только к тому, что надо.

Кроме того, само название struct указывает, что речь идёт о структуре данных и все. class - это обобщение некоего обьекта, у к-рого есть поведение и т.д.
0
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 447
27.07.2011, 23:47 #19
Не знаю, если отвлечься от формализма. По существу по-моему класс отличается от структуры - наличием методов и может быть свойств. И может быть событий, хотя в ANSI C++ события специально не поддерживаются. Хотя как писалось ниже в С++ можно в структуры включать функции, считаю это излишней вольностью.
По моему объект предметной обласnи описывается классом на С++ только если у него есть какой-то метод (функция) меняющая его свойства или создающая новое свойство).
Вот по этой то причине я мучался с классами представляющими модель квартира-комнаты.
В самом деле свойств дофига, а хоть один метод? Если отвлечься от тривиальных - расчет кубатуры по размерам комнаты. Если не интересоваться скажем процессами включения/выключения света как в некот учебн примерах классов - то вроде ничего. Ну может по смыслу задачи подойдет метод -прописка чел на жилплощади.
1
OstapBender
583 / 522 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
28.07.2011, 01:37 #20
структуры больше походят для простых сущностей например
C
1
2
3
4
struct coord {
int x;
int y;
};
1
ViNew
43 / 32 / 3
Регистрация: 16.07.2011
Сообщений: 73
28.07.2011, 10:11 #21
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
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
28.07.2011, 10:14 #22
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
43 / 32 / 3
Регистрация: 16.07.2011
Сообщений: 73
28.07.2011, 10:15 #23
half-node,
а вот так может выглядеть простой класс

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

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

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

Добавлено через 6 минут
LosAngeles, POD- называется структура которая не содержит функции - члены а только члены данные.
Нет. Вот контр-пример:
C++
1
struct Str { std::string s; };
Это НЕ POD.
0
LosAngeles
Заблокирован
28.07.2011, 11:27 #28
и ещё один
C++
1
2
3
4
5
6
struct class_name
 
{ 
   int data_member; // Элемент данных 
   void show_member(int); // Функция-элемент 
};
POD
0
ValeryLaptev
Эксперт С++
1041 / 820 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
28.07.2011, 11:34 #29
Цитата Сообщение от 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
LosAngeles
Заблокирован
28.07.2011, 11:37 #30
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Это - POD. А вот ваше определение POD, которое я видел выше - неверно
только оно не моё я никаких определений не давал
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2011, 11:37
Привет! Вот еще темы с ответами:

Связь между 2 классами - C++
Есть 2 класса: Class A { private: B** arrayB;/нужно раньше объявить класс И ... }; A* Object

Что общего и какие отличия между одномерным и двумерным массивами - C++
Что общего и какие отличия между одномерным и двумерным массивами

Передача данных между классами - C++
Здравствуйте! Программирую графику на C++ под DirectX9, если точнее то пытаюсь написать простой редактор 3D графики. есть класс...

Отношения между классами и объектами - C++
Для каждого индивидуального варианта необходимо создать консольную программу на С++, реализующую отношение ассоциации (агрегации или...


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

Или воспользуйтесь поиском по форуму:
30
Yandex
Объявления
28.07.2011, 11:37
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru