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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 56, средняя оценка - 4.84
d13mon
0 / 0 / 0
Регистрация: 22.01.2012
Сообщений: 11
#1

Везде говорится, что структуры и классы отличаются только типом доступа к членам по умолчанию - C++

22.01.2012, 21:20. Просмотров 7691. Ответов 16
Метки нет (Все метки)

Доброго времени суток всем.

У меня возник такой вопрос:

Везде говорится, что структуры и классы отличаются только типом доступа к членам по умолчанию. А как насчет типа наследования по умолчанию? Для классов - он private, а для структур?

То есть:
C++
1
2
3
struct A { int a;};
 
struct B :  A {};
Какой здесь тип наследования? Подозреваю что public, но интересно, что об этом говорит стандарт. Не нашел нигде подробного объяснения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2012, 21:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Везде говорится, что структуры и классы отличаются только типом доступа к членам по умолчанию (C++):

кто может обьяснить про что тут говорится - C++
С помощью этого оператора & можно также выделять и устанавливать значения от- дельных битов. Представьте себе, что в написанной вами...

Определить, верно ли, что данные последовательности отличаются только порядком - Pascal ABC
Даны натуральное число N и две последовательности A1 , A2 , …, AN и B1, B2, …, BN. Определить, верно ли, что эти последовательности...

Определить верно ли, что массивы отличаются только порядком следования элементов - Pascal
Даны натуральное число N и два одномерных массива A1, A2, …, AN и B1, B2, …, BN целых чисел. Определить верно ли, что эти массивы...

Даны два массива X1 и X2, верно ли что X1 и X2 отличаются только порядком элементов? - C#
Даны два массива X1 и X2, причем они могут содержать повторяющиеся элементы. Верно ли, что X1 и X2 отличаются только порядком элементов? ...

Определить, верно ли, что массивы отличаются друг от друга только порядком следования элементов - Visual Basic .NET
Задано два одномерных массива одинакового размера.Верно ли,что они отличаются друг от друга только порядком следования...

Считая, что два первых элемента списка соответствуют 1-му и 2-му членам арифметической прогрессии, оставить в списке только члены этой прогрессии - Pascal ABC
Всем добрый день. Преподаватель дал для решения такую задачу Дан однонаправленный список L из элементов целого типа. Считая, что два...

16
silent_1991
Эксперт С++
4986 / 3043 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
22.01.2012, 21:24 #2
d13mon, а проверить-то не судьба?
http://liveworkspace.org/code/60a7ca3740b5831deacc2095c8b710f5
2
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.01.2012, 21:35 #3
Цитата Сообщение от d13mon Посмотреть сообщение
Подозреваю что public
правильно подозреваете но одими подзрениями все тонкости не узнаешь всегда надо читать и проверять
1
d13mon
0 / 0 / 0
Регистрация: 22.01.2012
Сообщений: 11
22.01.2012, 21:36  [ТС] #4
Цитата Сообщение от silent_1991 Посмотреть сообщение
d13mon, а проверить-то не судьба?
http://liveworkspace.org/code/60a7ca3740b5831deacc2095c8b710f5
Я проверял - вроде public. Вопрос в другом - почему так? Раньше я считал, что в С++ структуры и классы различаются только типом доступа к членам и полностью взаимозаменяемы, а тут такая фигня.
0
silent_1991
Эксперт С++
4986 / 3043 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
22.01.2012, 21:40 #5
d13mon, ха, т.е. когда после фигурной скобки надо менять уровни доступа - это нормально, а когда после двоеточия - это "такая фигня"?
0
d13mon
0 / 0 / 0
Регистрация: 22.01.2012
Сообщений: 11
22.01.2012, 21:49  [ТС] #6
Цитата Сообщение от silent_1991 Посмотреть сообщение
d13mon, ха, т.е. когда после фигурной скобки надо менять уровни доступа - это нормально, а когда после двоеточия - это "такая фигня"?
Ну, это было для меня как минимум не очевидно. Встретил такую штуку в одном из вопросов в тесте на quizful.net., что меня и смутило. Ответил неправильно, думая что в код не скомпилируется из-за ошибки доступа к члену производного класса.

Может, есть и другие отличия между классами и структурами, о которых я не знаю?
0
silent_1991
Эксперт С++
4986 / 3043 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
22.01.2012, 21:52 #7
d13mon, отличия только в уровне доступа по умолчанию, как и пишут везде. К уровню доступа по умолчанию относится как уровень доступа к членам класса, так и уровень доступа при наследовании (дайте хоть один источник, где утверждается обратное).
1
d13mon
0 / 0 / 0
Регистрация: 22.01.2012
Сообщений: 11
22.01.2012, 22:02  [ТС] #8
Понял. Спасибо, silent_1991. Хотел досконально разобраться в этом вопросе и закрыть его для себя.
0
НеСказочник
58 / 46 / 8
Регистрация: 12.11.2012
Сообщений: 356
Записей в блоге: 2
12.11.2012, 19:23 #9
Меня, кстати, этот вопрос тоже волнует. Вот недавно для себя обнаружил (раньше просто не сталкивался, поэтому скорее всего это не новость), что экземпляр структуры во время присвоения, по умолчанию, копируется. А экземпляр класса нет. По крайней мере у меня так в программе получилось.
0
silent_1991
Эксперт С++
4986 / 3043 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.11.2012, 19:41 #10
НеСказочник, неверно. Оператор присваивания есть всегда, и в случае, если он не реализован явно, он выполняет простое побайтовое копирование данных из одного объекта в другой. Повторяю, структуры от классов ничем, кроме уровня доступа по умолчанию, не отличаются.

Добавлено через 17 секунд
Лучше выложите код. Посмотрим, что у вас там не копируется.
0
НеСказочник
58 / 46 / 8
Регистрация: 12.11.2012
Сообщений: 356
Записей в блоге: 2
12.11.2012, 19:44 #11
Я имею ввиду, что если экземпляр класса специально не клонировать, то все переменные, которым он присваивался, будут ссылаться на один и тот же экземпляр.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
12.11.2012, 19:46 #12
Цитата Сообщение от НеСказочник Посмотреть сообщение
Я имею ввиду, что если экземпляр класса специально не клонировать, то все переменные, которым он присваивался, будут ссылаться на один и тот же экземпляр.
Если у Вас есть динамическое выделение памяти в классе, то само собой указатели будут одинаковые.
1
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.11.2012, 19:46 #13
Цитата Сообщение от d13mon Посмотреть сообщение
Везде говорится, что структуры и классы отличаются только типом доступа к членам по умолчанию. А как насчет типа наследования по умолчанию? Для классов - он private, а для структур?
Это тоже тип доступа, только к членам предка. Сказано "дефолт везде паблик", значит паблик.
0
silent_1991
Эксперт С++
4986 / 3043 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.11.2012, 20:28 #14
НеСказочник, если вы возьмёте свой код и замените в нём слово class на struct, то увидите, что свойство сохраняется. Сложные данные, требующие собственной логики копирования, никогда правильно скопированы не будут, ни в структуре, ни в классе.
0
Харч
0 / 0 / 0
Регистрация: 01.08.2011
Сообщений: 6
27.07.2014, 16:49 #15
Вопрос возник такой. Возьмём следующий код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct A
{
int a;
int b;
};
struct B : A
{
string c;
string d;
};
int main()
{
B aaa = {...};
return 0;
}
Что надо написать в фигурных скобках вместо многоточия чтобы инициализировать aaa списком инициализации?
0
27.07.2014, 16:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2014, 16:49
Привет! Вот еще темы с ответами:

Мнение. Что лучше Структуры или Классы? - C++
Ребят, вопрос такой у меня возник. При решении одной и той же задачи я использовала Структуры и классы, но вот что из них лучше и...

Foreach по членам структуры - C#
Здравствуйте. Есть структура: struct Info { public string CompanyName { get; set; } public string...

Сложности с получением доступа к членам класса - C++
Попробую описать проблему, есть класс VstPlugin #include "VstPlugin.h" #include "ExampleEditor.h" using namespace std; ...

Присваивание значения членам структуры - C++
Вот я создал структуру: struct Circle { int x1; int x2; int y1; int y2; int r1; int r2; };


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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