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

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

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

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

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

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

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

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

То есть:
C++
1
2
3
struct A { int a;};
 
struct B :  A {};
Какой здесь тип наследования? Подозреваю что public, но интересно, что об этом говорит стандарт. Не нашел нигде подробного объяснения.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2012, 21:20     Везде говорится, что структуры и классы отличаются только типом доступа к членам по умолчанию
Посмотрите здесь:
C++ кто может обьяснить про что тут говорится
C++ Мнение. Что лучше Структуры или Классы?
C++ Сложности с получением доступа к членам класса
C++ Присваивание значения членам структуры
Дружественная функция не имеет доступа к приватным членам C++
Почему нет доступа к данным-членам классов-родителей в классах-наследниках? C++
Вопрос. Чем отличаются структуры в С++ от классов в C++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
22.01.2012, 21:24     Везде говорится, что структуры и классы отличаются только типом доступа к членам по умолчанию #2
d13mon, а проверить-то не судьба?
http://liveworkspace.org/code/60a7ca...cc2095c8b710f5
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.01.2012, 21:35     Везде говорится, что структуры и классы отличаются только типом доступа к членам по умолчанию #3
Цитата Сообщение от d13mon Посмотреть сообщение
Подозреваю что public
правильно подозреваете но одими подзрениями все тонкости не узнаешь всегда надо читать и проверять
d13mon
0 / 0 / 0
Регистрация: 22.01.2012
Сообщений: 11
22.01.2012, 21:36  [ТС]     Везде говорится, что структуры и классы отличаются только типом доступа к членам по умолчанию #4
Цитата Сообщение от silent_1991 Посмотреть сообщение
d13mon, а проверить-то не судьба?
http://liveworkspace.org/code/60a7ca...cc2095c8b710f5
Я проверял - вроде public. Вопрос в другом - почему так? Раньше я считал, что в С++ структуры и классы различаются только типом доступа к членам и полностью взаимозаменяемы, а тут такая фигня.
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
22.01.2012, 21:40     Везде говорится, что структуры и классы отличаются только типом доступа к членам по умолчанию #5
d13mon, ха, т.е. когда после фигурной скобки надо менять уровни доступа - это нормально, а когда после двоеточия - это "такая фигня"?
d13mon
0 / 0 / 0
Регистрация: 22.01.2012
Сообщений: 11
22.01.2012, 21:49  [ТС]     Везде говорится, что структуры и классы отличаются только типом доступа к членам по умолчанию #6
Цитата Сообщение от silent_1991 Посмотреть сообщение
d13mon, ха, т.е. когда после фигурной скобки надо менять уровни доступа - это нормально, а когда после двоеточия - это "такая фигня"?
Ну, это было для меня как минимум не очевидно. Встретил такую штуку в одном из вопросов в тесте на quizful.net., что меня и смутило. Ответил неправильно, думая что в код не скомпилируется из-за ошибки доступа к члену производного класса.

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

Добавлено через 17 секунд
Лучше выложите код. Посмотрим, что у вас там не копируется.
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 343
Записей в блоге: 2
12.11.2012, 19:44     Везде говорится, что структуры и классы отличаются только типом доступа к членам по умолчанию #11
Я имею ввиду, что если экземпляр класса специально не клонировать, то все переменные, которым он присваивался, будут ссылаться на один и тот же экземпляр.
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
12.11.2012, 19:46     Везде говорится, что структуры и классы отличаются только типом доступа к членам по умолчанию #12
Цитата Сообщение от НеСказочник Посмотреть сообщение
Я имею ввиду, что если экземпляр класса специально не клонировать, то все переменные, которым он присваивался, будут ссылаться на один и тот же экземпляр.
Если у Вас есть динамическое выделение памяти в классе, то само собой указатели будут одинаковые.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.11.2012, 19:46     Везде говорится, что структуры и классы отличаются только типом доступа к членам по умолчанию #13
Цитата Сообщение от d13mon Посмотреть сообщение
Везде говорится, что структуры и классы отличаются только типом доступа к членам по умолчанию. А как насчет типа наследования по умолчанию? Для классов - он private, а для структур?
Это тоже тип доступа, только к членам предка. Сказано "дефолт везде паблик", значит паблик.
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.11.2012, 20:28     Везде говорится, что структуры и классы отличаются только типом доступа к членам по умолчанию #14
НеСказочник, если вы возьмёте свой код и замените в нём слово class на struct, то увидите, что свойство сохраняется. Сложные данные, требующие собственной логики копирования, никогда правильно скопированы не будут, ни в структуре, ни в классе.
Харч
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 списком инициализации?
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
27.07.2014, 17:31     Везде говорится, что структуры и классы отличаются только типом доступа к членам по умолчанию #16
Цитата Сообщение от Харч Посмотреть сообщение
Что надо написать в фигурных скобках вместо многоточия чтобы инициализировать aaa списком инициализации?
В данном случае это не получится из-за наличия базового класса у типа B.
Более полный ответ тут.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2014, 18:59     Везде говорится, что структуры и классы отличаются только типом доступа к членам по умолчанию
Еще ссылки по теме:
C++ Создать массив из 5 элементов с типом заданной структуры
Строка: Напечатать те слова, которые отличаются только порядком следования букв. C++
C++ Строки: Вывести на экран только те слова, которые отличаются от последнего и в которых нет повторяющихся букв.
C++ Классы и структуры в С++
C++ Классы и структуры...

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

Или воспользуйтесь поиском по форуму:
Харч
0 / 0 / 0
Регистрация: 01.08.2011
Сообщений: 6
27.07.2014, 18:59     Везде говорится, что структуры и классы отличаются только типом доступа к членам по умолчанию #17
Спасибо!
Yandex
Объявления
27.07.2014, 18:59     Везде говорится, что структуры и классы отличаются только типом доступа к членам по умолчанию
Ответ Создать тему
Опции темы

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