Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.98/46: Рейтинг темы: голосов - 46, средняя оценка - 4.98
d13mon
0 / 0 / 1
Регистрация: 22.01.2012
Сообщений: 11
1

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

22.01.2012, 21:20. Просмотров 8346. Ответов 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
Ответы с готовыми решениями:

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

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

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

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

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

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

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

Добавлено через 17 секунд
Лучше выложите код. Посмотрим, что у вас там не копируется.
0
НеСказочник
58 / 46 / 13
Регистрация: 12.11.2012
Сообщений: 367
Записей в блоге: 2
12.11.2012, 19:44 11
Я имею ввиду, что если экземпляр класса специально не клонировать, то все переменные, которым он присваивался, будут ссылаться на один и тот же экземпляр.
0
Croessmah
++Ͻ
14740 / 8422 / 1597
Регистрация: 27.09.2012
Сообщений: 20,716
Записей в блоге: 2
Завершенные тесты: 1
12.11.2012, 19:46 12
Цитата Сообщение от НеСказочник Посмотреть сообщение
Я имею ввиду, что если экземпляр класса специально не клонировать, то все переменные, которым он присваивался, будут ссылаться на один и тот же экземпляр.
Если у Вас есть динамическое выделение памяти в классе, то само собой указатели будут одинаковые.
1
taras atavin
4205 / 1768 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
12.11.2012, 19:46 13
Цитата Сообщение от d13mon Посмотреть сообщение
Везде говорится, что структуры и классы отличаются только типом доступа к членам по умолчанию. А как насчет типа наследования по умолчанию? Для классов - он private, а для структур?
Это тоже тип доступа, только к членам предка. Сказано "дефолт везде паблик", значит паблик.
0
silent_1991
Эксперт С++
5010 / 3070 / 270
Регистрация: 11.11.2009
Сообщений: 7,044
Завершенные тесты: 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
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
27.07.2014, 17:31 16
Цитата Сообщение от Харч Посмотреть сообщение
Что надо написать в фигурных скобках вместо многоточия чтобы инициализировать aaa списком инициализации?
В данном случае это не получится из-за наличия базового класса у типа B.
Более полный ответ тут.
0
Харч
0 / 0 / 0
Регистрация: 01.08.2011
Сообщений: 6
27.07.2014, 18:59 17
Спасибо!
0
27.07.2014, 18:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2014, 18:59

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

Foreach по членам структуры
Здравствуйте. Есть структура: struct Info { public string...

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


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

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

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