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

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

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

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

18.08.2010, 12:38. Просмотров 14981. Ответов 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
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
18.08.2010, 12:40 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
half-node, Совместимость с Си.
3
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
18.08.2010, 12:41  [ТС] #3
Цитата Сообщение от Lavroff Посмотреть сообщение
half-node, Совместимость с Си.
Очень лаконично...но не вполне для меня понятно. Что ты имеешь в виду?
1
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
18.08.2010, 12:58 #4
half-node, Структуры - совместимость с языком Си. В С++ структуры и классы эквивалентны, кроме доступа по умолчанию.

Добавлено через 15 минут
Хотя... Не уверен что в классе можно определить битовые поля, как в структуре, но наверное тоже можно. Да можно. Тогда ничем, кроме доступа
1
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
18.08.2010, 13:03  [ТС] #5
Спасибо. Более или менее ясно.
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
18.08.2010, 13:05 #6
Цитата Сообщение от Lavroff Посмотреть сообщение
Совместимость с Си
Если бы в Си++ структуры убрали совсем, то Си-подобный код перестал бы компилироваться. Структуры слишком часто встречаются в Си-коде, чтобы такое позволить.
в Си++ вообще лучше пользоваться классами.
1
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
18.08.2010, 13:49 #7
Цитата Сообщение от fasked Посмотреть сообщение
в Си++ вообще лучше пользоваться классами.
Это спорный вопрос.
Если набор данных не имеет собственного поведения лучше его оформить в виде структуры.
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
18.08.2010, 14:10 #8
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Это спорный вопрос.
Если набор данных не имеет собственного поведения лучше его оформить в виде структуры.
да, я конечно поспешил с такими словами.
но в чем разница с технической точки зрения?
0
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
18.08.2010, 16:49 #9
CyBOSSeR, а можно в структурах объявлять функции?
0
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
18.08.2010, 16:54  [ТС] #10
Цитата Сообщение от nikkka Посмотреть сообщение
CyBOSSeR, а можно в структурах объявлять функции?
Да, можно. Более того, в С++ структуры можно даже наследовать >_<

Добавлено через 2 минуты
Только я вот не уверен, точнее не знаю, имеет ли структура конструктор. Подозреваю, что нет.
Ошибся))
Каждая структура имеет неявный открытый конструктор без параметров. Этот конструктор инициализирует все элементы данных структуры с их значениями по умолчанию. Это поведение переопределить невозможно.
Добавлено через 2 минуты
Вообще вот ссылка на MSDN по этому вопросу. Если вдруг кому-то пригодится, как мне.
2
HIMen
4137 / 1386 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
18.08.2010, 16:59 #11
half-node, там про структуры CLR
0
easybudda
Модератор
Эксперт CЭксперт С++
9662 / 5611 / 952
Регистрация: 25.07.2009
Сообщений: 10,774
18.08.2010, 17:00 #12
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от half-node Посмотреть сообщение
Только я вот не уверен, точнее не знаю, имеет ли структура конструктор.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
struct AB {
    int a;
    int b;
    AB(int _a, int _b) : a(_a), b(_b) {}
};
 
int main(){
    AB ab(13, 69);
    std::cout << "a = " << ab.a << " b = " << ab.b << std::endl;
    return 0;
}
3
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
18.08.2010, 17:04  [ТС] #13
Цитата Сообщение от HIMen Посмотреть сообщение
half-node, там про структуры CLR
Там вообще про VB...

easybudda, спасибо!
Буду знать. Только вот теперь вообще я потерялся в смысле существования класса, если есть структура, которая поддерживает все тоже самое.
0
easybudda
Модератор
Эксперт CЭксперт С++
9662 / 5611 / 952
Регистрация: 25.07.2009
Сообщений: 10,774
18.08.2010, 17:10 #14
half-node, просто считайте синонимами объявления
C++
1
2
3
4
5
6
7
8
struct A{
  // bla bla bla
};
 
class A{
public:
  // bla bla bla
}
Ну и по поводу совместимости с С - к примеру весь WinAPI написан на С. За неимением в С++ конструкций типа struct пришлось бы немыслемые велосипеды городить, чтобы этим самым API пользоваться...
0
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
18.08.2010, 17:15  [ТС] #15
А зачем пользоваться типом struct, если есть эквивалентный class?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2010, 17:15
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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