13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
|
|||||||||||
1 | |||||||||||
Вопрос про Спецификаторы доступа Public и Private28.10.2011, 15:38. Показов 6883. Ответов 42
Метки нет (Все метки)
Читаю Дейтлов...
Дошел до объяснения спецификаторов и не могу понять 2 предложения:
Еще комментарий к этой же строке написан "Название курса для данного GradeBook".Как это понимать?
0
|
28.10.2011, 15:38 | |
Ответы с готовыми решениями:
42
Модификаторы доступа public, private, protected Изменить модификаторы доступа public к полям класса на private Public и Private Private и public |
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
28.10.2011, 20:30 | 21 |
0
|
Заблокирован
|
||||||
28.10.2011, 20:33 | 22 | |||||
с другой стороны, если класс уже знает все те типы, с которыми будут оперировать его данные-члены или методы, то объявлять последние можно в любом порядке. Ага. аааа.. скомпилировалось. Да
0
|
Заблокирован
|
|||||||||||
28.10.2011, 20:36 | 23 | ||||||||||
Почему у вас не компилируется? Что за ошибка выскакивает? Может быть где-то опечатка?
Добавлено через 2 минуты Если на эту тему, то пожалуйста.
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
28.10.2011, 20:39 | 24 |
Сыроежка, а вот глобальные переменные сюда вмешивать не надо, задача зачастую меняется при введении дополнительных условий. Да и в самом начале я говорил несколько о другом, подразумевал скорее взаимодействие полей-данных с методами.
0
|
Заблокирован
|
|
28.10.2011, 20:40 | 25 |
Сыроежка, вы осознаете что объявляете новый тип данных на основе уже существующего типа данных?
Ну то есть, вы не используете в классе существующие типы данных, а создаете новые типы прям в объявлении класса. Ничего удивительного, что при таком подходе появляются левые зависимости между типами, а сам класс легко может пофейлится
0
|
Заблокирован
|
|
28.10.2011, 20:42 | 26 |
Ни в начале, ни сейчас вы ничего правильного в соответствии со стандартом не говорите, а лишь фантазируете! Нужно корректно формулировать утверждения. Стандарт ясно говорит, когда неквалифицированное имя ищется в области имени класса. Я по памяти не помню, но это относится к определениям функций-членов класса, к определению их параметров, к определению аргументов по умолчанию, к ctor-инициализации конструктора, к определениям статических членов класса. Тем не менее порядок следования объявлений членов-данных класса внутри класса очень важен, если опредедение одного члена-данного зависит от определения другого члена-данного.!
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
28.10.2011, 20:44 | 27 |
Сыроежка, вы, конечно, всё сформулировали очень внятно, спасибо вам от всех нас за это.
Ключевая фраза.
1
|
Заблокирован
|
|
28.10.2011, 20:45 | 28 |
Я не совсем понял вашу тирпаду, но я вам привел второй пример, где никакие новые типы не объявляются внутри класса. Можно привести более интересеные примеры, когда есть наследование классов. Так как новое имя члена будет скрывать имя члена базового класса. Поэтому порядок объявления членов производного класса будет важен, если они зависимы между собой.
0
|
Заблокирован
|
||||||
28.10.2011, 20:50 | 29 | |||||
обявление нового типа данных.
И этот новый тип данных - масив целых чисел зависит от i возникает зависимость между массивом a и переменой i при СОЗДАНИИ нового типа, компилятору нужно знать всю информацию о том, при помощи чего новый тип создаётся. Если сделать так:
Определение же методов никак не зависит от порядка объявления данных-членов /зы вы ступали понятие "объявления" типа, с понятием "создание" типа
0
|
Заблокирован
|
|
28.10.2011, 20:54 | 30 |
Увы, я не знаю, что такое "создание типа". Проблема на самом деле лежит в том, что вы не знаете станадарта, а фантазируете! Я уже написал, в каких случаях неквалифицированное имя ищется в области видимости класса. Вы же по-прежнему безграмотно пытаетесь что-то там нафантазировать!
Читайте внимательно то, что пишет Сыроежка, и будет вам счастье!
0
|
Заблокирован
|
|||||||||||
28.10.2011, 21:01 | 31 | ||||||||||
Создавать новые типы внутри создаваемых типов - практика ведущая к ошибкам.
0
|
silent_1991
|
28.10.2011, 21:02
#32
|
Не по теме: Чёрт, почему на форуме нет молящегося смайлика?.. :wall:
0
|
Заблокирован
|
||||||
28.10.2011, 21:06 | 33 | |||||
Вообще-то, в С++ есть такие понятия, как объявление и определение. Этими понятиями и надо пользоваться. В вашем примере внутри struct A определяется struct B. Определения классов вводят новые имена типов.
И почему вы сделали вывод про "практику, ведущую к ошибкам", я не знаю. Это, например, часто делается при объявлении стандартных контейнеров. Например, итераторы определяются внутри класса контейнера. P.S. Добавлю также, чтобы вы знали, когда класс только объявляется без его определения. Это когда имя класса вводится с помощью уточненного спецификатора типа (elaborated type specifier). Например,
0
|
Заблокирован
|
|
28.10.2011, 21:14 | 34 |
При объявлении класса, мы объявляем данные-члены класса. То есть, мы говорим компилятору: у этого класса будут вот такие данные-члены.
Какие такие? Если к моменту объявления данных-членов, их тип неизвестен компилятору, то это ошибка. Это попытка определить ещё не объявленный тип данных . Другими словами, согласно общепринятой терминологии, объявляение данных членов класса есть определения типов этих данных членов. Создание нового типа - объявление типа (не данных-членов этого типа, а самого типа). Понятие очень удобное, дабы не путаться между "объявлением" и "определением" в зависимости от контекста.
0
|
Заблокирован
|
|
28.10.2011, 21:16 | 35 |
Нет, лучше не пользоваться доморощенными терминами, так как они не унифицированы и могут только запутывать других людей, с кем вы общаетесь, так как они могут в это вкладывать свой смысл.
В стандарте четко говорится, что является объявлением, а что является при этом определением. С чем я не согласен со стандартом, это то, что typedef не только является объявлением, как написано в стандарте, но может играть роль определения, если используется для классов или перечислений.
0
|
Заблокирован
|
|
28.10.2011, 21:22 | 36 |
Сыроежка, суть же довольно проста: вы не можете объявлять в классе данные-члены, типы данных которых классу ещё не известны.
Это определение самого класса. А вот сами типы данных-членов должны быть известны классу к моменту их объявления в классе. Если я что-то путаю, попровьте меня.
0
|
Заблокирован
|
|
28.10.2011, 21:34 | 37 |
Типы неизвестны не классу, а компилятору.. Компилятор осуществляет поиск используемых неквалифицированных имен согласно определенному алгоритму. То есть, например, некоторое имя может быть объявлено в пространстве имен, которое заключает в себе определение класса. Может также использоваться директива using. У меня есть на эту тему сообщение на www.clipper.borda.ru.
0
|
Заблокирован
|
|||||||||||
29.10.2011, 15:19 | 40 | ||||||||||
Добавлено через 17 часов 42 минуты кстати. Вот очень красноречивый пример того, насколько реально важен порядок объявления данных-членов класса: 1. От порядка, в котором объявляются данные члены класса зависит размер класса:
От порядка объявления данных членов в классе зависит то, насколько корректно сработает инициализация данных-членов в списке инициализации:
0
|
29.10.2011, 15:19 | |
29.10.2011, 15:19 | |
Помогаю со студенческими работами здесь
40
Public: и private: Public/private Из private в public Классы (private, public) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |