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

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

22.01.2012, 21:20. Просмотров 8140. Ответов 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++):

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

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

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

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

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

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

16
silent_1991
Эксперт С++
5007 / 3067 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
22.01.2012, 21:24 #2
d13mon, а проверить-то не судьба?
http://liveworkspace.org/code/60a7ca3740b5831deacc2095c8b710f5
2
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 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
Эксперт С++
5007 / 3067 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 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
Эксперт С++
5007 / 3067 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 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
Сообщений: 362
Записей в блоге: 2
12.11.2012, 19:23 #9
Меня, кстати, этот вопрос тоже волнует. Вот недавно для себя обнаружил (раньше просто не сталкивался, поэтому скорее всего это не новость), что экземпляр структуры во время присвоения, по умолчанию, копируется. А экземпляр класса нет. По крайней мере у меня так в программе получилось.
0
silent_1991
Эксперт С++
5007 / 3067 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
12.11.2012, 19:41 #10
НеСказочник, неверно. Оператор присваивания есть всегда, и в случае, если он не реализован явно, он выполняет простое побайтовое копирование данных из одного объекта в другой. Повторяю, структуры от классов ничем, кроме уровня доступа по умолчанию, не отличаются.

Добавлено через 17 секунд
Лучше выложите код. Посмотрим, что у вас там не копируется.
0
НеСказочник
58 / 46 / 13
Регистрация: 12.11.2012
Сообщений: 362
Записей в блоге: 2
12.11.2012, 19:44 #11
Я имею ввиду, что если экземпляр класса специально не клонировать, то все переменные, которым он присваивался, будут ссылаться на один и тот же экземпляр.
0
Croessmah
++Ͻ
14158 / 8083 / 1513
Регистрация: 27.09.2012
Сообщений: 19,921
Записей в блоге: 3
Завершенные тесты: 1
12.11.2012, 19:46 #12
Цитата Сообщение от НеСказочник Посмотреть сообщение
Я имею ввиду, что если экземпляр класса специально не клонировать, то все переменные, которым он присваивался, будут ссылаться на один и тот же экземпляр.
Если у Вас есть динамическое выделение памяти в классе, то само собой указатели будут одинаковые.
1
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
12.11.2012, 19:46 #13
Цитата Сообщение от d13mon Посмотреть сообщение
Везде говорится, что структуры и классы отличаются только типом доступа к членам по умолчанию. А как насчет типа наследования по умолчанию? Для классов - он private, а для структур?
Это тоже тип доступа, только к членам предка. Сказано "дефолт везде паблик", значит паблик.
0
silent_1991
Эксперт С++
5007 / 3067 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 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
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 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
Привет! Вот еще темы с решениями:

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

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

Сложности с получением доступа к членам класса
Попробую описать проблему, есть класс VstPlugin #include "VstPlugin.h"...

Присваивание значения членам структуры
Вот я создал структуру: struct Circle { int x1; int x2; int y1; int...


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

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

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