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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 108, средняя оценка - 4.98
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
18.08.2010, 12:38     Отличия между структурами и классами #1
Объясните пожалуйста, в С++, получается, что структура отличается от класса только тем, что у нее по умолчанию все данные public?
Т.е. наследовать структуры я тоже могу. Тогда как-то непонятен смысл создания двух одинаковых типов объектов, только что с разными названиями.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ViNew
 Аватар для ViNew
40 / 29 / 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;
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 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 Посмотреть сообщение
+ функции обработки переменных этого класса
Эти "функции" называются методами.
ViNew
 Аватар для ViNew
40 / 29 / 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); // Функция-элемент 
};
LosAngeles
Заблокирован
28.07.2011, 10:27     Отличия между структурами и классами #24
Цитата Сообщение от ViNew Посмотреть сообщение
а вот так может выглядеть простой класс
а сложный как выглядит? если ты имеешь ввиду что это POD, то спешу огорчить - это не так
ViNew
 Аватар для ViNew
40 / 29 / 3
Регистрация: 16.07.2011
Сообщений: 73
28.07.2011, 11:05     Отличия между структурами и классами #25
fasked, Код правильный я с тобой согласен, то что многим наплевать , тоже согласен но я думаю сознательные программисты разделяют этих два понятия даже если они имеют почти одинаковые возможности.

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

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

Добавлено через 6 минут
LosAngeles, POD- называется структура которая не содержит функции - члены а только члены данные.
Нет. Вот контр-пример:
C++
1
struct Str { std::string s; };
Это НЕ POD.
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
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
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
LosAngeles
Заблокирован
28.07.2011, 11:37     Отличия между структурами и классами #30
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Это - POD. А вот ваше определение POD, которое я видел выше - неверно
только оно не моё я никаких определений не давал
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
28.07.2011, 11:39     Отличия между структурами и классами #31
Пардон, это ViNew дал определение...
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.07.2011, 11:39     Отличия между структурами и классами #32
будет ли верным определение: "все что может быть мембером uniona - POD" в рамках стандарта от 2003?
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
28.07.2011, 11:42     Отличия между структурами и классами #33
Цитата Сообщение от 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
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
28.07.2011, 14:45     Отличия между структурами и классами #34
Цитата Сообщение от 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.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
28.07.2011, 14:58     Отличия между структурами и классами #35
asics, ну вот.
Как раз на нетривиальный copy-constructor VC++ 2010 и жаловался. Все правильно!
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
28.07.2011, 20:19     Отличия между структурами и классами #36

Не по теме:

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


Побуду кепом: автореферентные классы/структуры создаются несколько по другому:
Так в классе один из объектов может быть этого же типа
C++
1
2
3
4
5
class Test
{
...
Test a;
}
а вот в структуре уже можно поместить только указатель на неё же
C++
1
2
3
4
5
struct Test
{
...
*Test a;
}
Но это так, чисто формальности.
CAHTEXHUK
Заблокирован
28.07.2011, 20:45     Отличия между структурами и классами #37
Цитата Сообщение от Gepar Посмотреть сообщение
Так в классе один из объектов может быть этого же типа
да ну как это возможно. Рекурсия получается. Мой msvs 2008 не принял это
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.07.2011, 20:49     Отличия между структурами и классами #38
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от 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-ом путаете товарищ!
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
28.07.2011, 20:50     Отличия между структурами и классами #39
CAHTEXHUK, а вот так:
C++
1
2
3
4
5
class Test
{
...
Test *a;
}
Извините, писал простой пример без компилятора и прочего, а в таких случаях вечно что-то забудешь, то точку с запятой то скобки уравновесить, в даном случае я забыл *.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2011, 20:52     Отличия между структурами и классами
Еще ссылки по теме:

В чем отличия между выражением (expression) и оперетором (statement)? C++
C++ Взаимодействие между классами
Связь между 2 классами C++

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

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
28.07.2011, 20:52     Отличия между структурами и классами #40
Gepar, тогда в чём отличия?
Yandex
Объявления
28.07.2011, 20:52     Отличия между структурами и классами
Ответ Создать тему
Опции темы

Текущее время: 16:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru