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

Теория по С++ - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.95
Trisha Ray
80 / 0 / 0
Регистрация: 01.02.2012
Сообщений: 93
23.06.2013, 23:01     Теория по С++ #1
Помогите ответить на вопросы, очень нужно к экзамену.

На что-то ответила, но не знаю правильно ли(

1. Что находится в списке инициализации конструктора композитного класса, подобъекты которого инициализируют конструкторы без аргументов?

2. В каких случаях необходимо применять список инициализации компонентов класса?

3. Когда в конструкторе композитного класса не указывается список инициализации подобъектов?

4. Когда вызываются деструкторы подобъектов композитного класса?
Сначала деструктор подобъекта, затем базовый деструктор.

5. В каком порядке вызываются конструкторы подобъектов композитного класса?
Сначала конструктор базового класса, затем конструктор подобъекта.

6. Какой формат имеет обращение к полю X подобъекта Y композитного объекта Z в его компонентом методе и из внешней функции?

7. Какие отношения реализует композиция и наследование?
Композиция – принадлежит
Наследование – является

8. В композитном классе Z есть 2 подобъекта класса Y, каждый из которых должен инициализироваться необязательно одинаковым значением целочисленного параметра. Какой формат должно иметь определение конструктора композитного класса Z?
Y (int x, int y) : Z(x, y) {}

9. В композитном классе Z есть 2 подобъекта класса Y, каждый из которых должен инициализироваться одинаковым значением целочисленного параметра X. Какой формат должно иметь определение конструктора композитного класса Z?

10. В композитном классе Z есть подобъекты классов X и Y, конструкторы которых имеют, соответственно. Целочисленный (i) и символьный (с) аргументы. Какой формат должно иметь определение конструктора композитного класса Z?

11. Класс Z имеет 2 константные целочисленные компоненты X и Y. Какой формат должна иметь дефиниция конструктора класса Z с 2-мя формальными параметрами _X и _Y для инициализации полей X и Y?

12. Какой формат должно иметь обращение к полю X подобъекта Y композитного объекта Z в его компонентном методе и из внешней функции?

13. Какой класс считается контейнерным (композитным)?
это универсальные шаблонные классы, предназначенные для хранения элементов заданного типа в смежных областях памяти

14. Какая последовательность вызова конструкторов в композитных (контейнерных) классах?
Сначала базового класса, потом производного

15. В каком порядке вызываются деструкторы в композитных (контейнерных) классах?
Сначала производного, потом базового класса.

16. В композитном классе House имеются 2 подобъекта класса Room, который в свою очередь является композитным классом, содержащим 2 подобъекта класса Furniture. Нужно определить порядок инициализации подобъектов перечисленных классов.
1) инициализация в классе House
2) инициализация в классе Room
3) инициализация в классе Furniture

17. Кто имеет доступ к приватным компонентам приватного подобъекта композитного (контейнерного) класса?


18. Кто имеет доступ к публичным компонентам публичного подобъекта композитного (контейнерного) класса?

19. Кто имеет доступ к приватным компонентам публичного подобъекта композитного (контейнерного) класса?

20. Кто имеет доступ к публичным компонентам приватного подобъекта композитного (контейнерного) класса?

21. Каким образом в композитном классе специфицируется обращение к конструкторам подобъектов?

22. Каким образом в композитном классе должны передаваться аргументы конструкторам подобъектов?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2013, 23:01     Теория по С++
Посмотрите здесь:

C++ теория
теория C++
теория C++
C++ Теория
Теория C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
24.06.2013, 00:45     Теория по С++ #2
1. Инициализация полей этого класса, конструкторы без аргументов можно явно не писать
2. Когда поля-объекты не имеют конструкторов по умолчанию, если в классе есть константы и ссылки
3. Когда нужно вызвать их конструкторы по умолчанию
4. Сначала деструктор самого класса, потом деструкторы подобъектов в порядке, обратном вызову его конструкторов
5. В порядке их объявления в классе (независимо от того, в каком порядке они в списке инициализации)
6. Из класса объекта Z - Y.X Из внешней функции - Z.Y.X
7. Верно
8. Z(int y1, int y2):Yobj1(y1),Yobj2(y2)
9. Z(int y1):Yobj1(y1),Yobj2(y1)
10. Z(int i1, int i2, char c1, char c2):Xobj(i1,c1),Yobj(i2,c2)
11. Z(int _X, int _Y):X(_X),Y(_Y)
12. см. 6?
13. Верно
14. Сначала конструктор элементов, потом конструктор класса
15. Сначала деструктор класса, потом деструкторы элементов
16. Сначала Furniture, потом Room, потом House
17. Методы и друзья класса подобъекта, которые, к тому же, являются друзьями композитного класса и методы и друзья композитного класса, которые, к тому же, являются друзьями класса подобъекта
18. Все
19. Методы и друзья класса подобъекта
20. Методы и друзья композитного класса
21. Явным образом в списке инициализации
22. Через явный вызов конструкторов подобъектов в списке инициализации
Trisha Ray
80 / 0 / 0
Регистрация: 01.02.2012
Сообщений: 93
24.06.2013, 11:34  [ТС]     Теория по С++ #3
Спасибо огромное))
Trisha Ray
80 / 0 / 0
Регистрация: 01.02.2012
Сообщений: 93
24.06.2013, 21:20  [ТС]     Теория по С++ #4
А не могли бы помочь с этими вопросами?

по механизму наследования

1. В каком порядке вызываются конструкторы базового и производного классов при создании объекта производного класса?
2. В каком порядке вызываются деструкторы базового и производного классов при уничтожении объекта производного класса?
3. С какой целью в общедоступных базовых классах при категории наследования public вводятся защищенные ( protected ) компоненты?
4. Какие права доступа к компонентам базового класса устанавливаются по умолчанию в производном классе при категории наследования private ?
5. Какие права доступа к компонентам базового класса устанавливаются по умолчанию в производном классе при категории наследования public ?
6. Что происходит, если при определении конструктора производного класса не указан вызов конструктора базового класса?
7. В каком случае при определении конструктора производного класса можно явно не указывать вызов конструктора базового класса?
8. В каком варианте допустима взаимная подстановка между объектами базового и производного классов?
9. В каком варианте допустима взаимная подстановка между указателями на объекты базового и производного классов?
10. Почему вместо объектов производного класса нельзя подставлять объекты базового класса?
11. Что никогда не наследуется из базового класса?
12. Когда конструктор производного класса может быть пустым?
13. Пусть 1 компонентный метод базового класса перегружен в производном классе, а объект производного класса адресуется через указатель на базовый класс. Какой метод может быть вызван по этому адресу: базовый или перегруженный?
14. Как осуществляется преобразование указателя объекта производного класса в указатель объекта базового класса?
15. Как можно преобразовать указатель объекта базового класса в указатель объекта производного класса?
16. Когда есть доступ к приватным данным базового класса в методах производного класса?
17. Какой доступ имеют методы производного класса к публичным компонентам базового класса при категории наследования private?
18. Как получить избирательный доступ в производном классе к публичным компонентам базового класса при категории наследования private?
19. Какая категория наследования устанавливается по умолчанию в декларации производного класса и структуры?
20. Кому доступны защищенные компоненты базового класса?
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
24.06.2013, 22:09     Теория по С++ #5
1. Сначала базового, потом производного
2. Сначала производного, потом базового
3. Чтобы они были доступны для производных классов, но не были доступны извне
4. public и protected становятся private, private скрываются
5. private скрываются, остальное - без изменений
6. Вызывается конструктор по умолчанию (если есть)
7. Если у базового класса есть конструктор по умолчанию
8. Объекту базового класса можно присвоить объект производного класса (при этом часть производного класса теряется)
9. Указателю баз. класса может быть присвоен указатель производного класса. Возможно и наоборот, если класс полиморфный и идет проверка с помощью reinterpret_cast
10. Потому что может идти обращение к полям производного класса, которых нет в базовом
11. Конструкторы и деструкторы
12. Когда у базовых классов есть конструкторы по умолчанию
13. Базовый, если метод виртуальный - то производный
14. В смысле как? Неявно, что ли?
15. С помощью идентификации типа времени выполнения (RTTI), используя reinterpret_cast
16. Если производный класс или его метод являются другом базового класса
17. private
18. Включить их директивой using в производном классе
19. Класса - private, структуры - public
20. Базовому классу, его друзьям, производным классам и их друзьям (если, конечно, доступ к базовым классам не нарушится)
Trisha Ray
80 / 0 / 0
Регистрация: 01.02.2012
Сообщений: 93
24.06.2013, 22:34  [ТС]     Теория по С++ #6
Спасибо огромное)))
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
25.06.2013, 13:21     Теория по С++ #7
11. оператор = тоже не наследуется, т.к. его действия сходны с конструированием.

Добавлено через 2 минуты
14. производный "урезается" до базового.

Добавлено через 1 минуту
Вообще, вопросы странные какие-то. Вот что это, например:
Когда конструктор производного класса может быть пустым?
Да всегда может, в смысле, скомпилируется, или в плане чего вопрос?
Trisha Ray
80 / 0 / 0
Регистрация: 01.02.2012
Сообщений: 93
25.06.2013, 13:32  [ТС]     Теория по С++ #8
Такие вопросы в универе дают(

Добавлено через 4 минуты
Если не трудно, посмотрите еще такие вопросы, ответы были, но преподаватель сказал что не правильно отвечали(

1. Какие оператор-функции по умолчанию включаются в спецификацию класса, если они явно не определены?
2. Какой тип аргумента и кода возврата должен иметь оператор присваивания, создаваемый по умолчанию?
3. Сколько аргументов должна иметь компонентная оператор-функция, перегружающая унарную операцию?

4. Сколько аргументов должна иметь компонентная оператор-функция, перегружающая бинарную операцию?
5. Сколько аргументов должна иметь дружественная оператор-функция, перегружающая унарную операцию?
6. Какие операторы языка С не могут быть перегружены в классах объектов С++?
7. Как интерпретируется последовательность присваиваний:
w = x = y = z;
8. Какие операции языка С++ не могут быть перегружены в классах объектов?
9. Что является аргументом return в коде оператора присваивания?
10. Сколько аргументов должна иметь дружественная оператор-функция, перегружающая бинарную операцию?
11. Каким образом можно запретить присваивание объектов класса во внешних функциях?
12. Можно ли перегрузить операцию ** для возведения в степень объектов класса?
13. Возможна ли перегрузка операций для данных стандартных типов?
14. В каких случаях нельзя реализовать перегрузку операций и перегрузку оператора в форме компонентной функции класса?
15. Зачем нужны дружественные функции?
16. В каком случае неизбежно использование оператора преобразования типов?
17. Возможно ли реализовать внешнюю оператор-функцию для перегрузки бинарной операции, которой передаются два указателя на объекты класса?
18. Какие аргументы и код возврата имеет оператор преобразования типа?
19. Что обеспечивает правую ассоциативность оператора присваивания?
Записать в функциональной форме присваивание w = x = y = z; где w, x, y, z
являются объектами одного класса.
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
25.06.2013, 16:44     Теория по С++ #9
1. =, &
2. Аргумент - константная ссылка, возврат - ссылка на объект, который слева от =
3. 0
4. 1
5. 1
6. точка?
7. w.operator=(x.operator=(y.operator=(z)))
8. .,.*,::,::*,new,new[],delete,delete[]
9. *this
10. 2
11. Сделать уровень доступа operator= protected или private
12. Нет
13. Нет
14. В случаях, когда нужно, чтобы в бинарной операции слева стоял объект другого класса, а справа объект этого класса, и другой класс изменять нельзя
15. Чтобы перегружать бинарные операции в случаях, названных в п.14
16. Когда нужно преобразовать во встроенный тип
17. Нет
18. Аргументов нет, возврат - того же типа, что и тип, указанный в перегруженном операторе
19. Можно делать удобные конструкции, подобные той, что была в п.7
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
25.06.2013, 18:05     Теория по С++ #10
по первому списку
7. Композиция это не просто принадлежит, это когда одно не существует без другого. Типа как кнопки не существует без окна. Это частный случай агрегации.

тут говорится, что правильнее использовать слово "содержит", а не "принадлежит"
Trisha Ray
80 / 0 / 0
Регистрация: 01.02.2012
Сообщений: 93
25.06.2013, 21:21  [ТС]     Теория по С++ #11
Спасибо огромное, очень выручили)
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
25.06.2013, 21:45     Теория по С++ #12
Цитата Сообщение от ViktorKozlov Посмотреть сообщение
1. =, &
Ссылка тоже? По-моему только =.
Цитата Сообщение от ViktorKozlov Посмотреть сообщение
8. .,.*,::,::*,new,new[],delete,delete[]
new/delete вполне могут быть. Тут наверно имеются в виду еще и френды: <<, >>, префиксная запятая.
Цитата Сообщение от Trisha Ray Посмотреть сообщение
Зачем нужны дружественные функции?
В общем, наверно, для доступа к скрытым полям и методам класса.
Цитата Сообщение от Trisha Ray Посмотреть сообщение
В каком случае неизбежно использование оператора преобразования типов?
Он один?
Цитата Сообщение от ViktorKozlov Посмотреть сообщение
Когда нужно преобразовать во встроенный тип
Вот здесь хотелось бы почитать об этом. Т.е. когда нужно, например, преобразовать тип класса A в int?
А какой из операторов? static_cast который? Или пользовательский? А как же преобразование с помощью конструктора?
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
25.06.2013, 21:59     Теория по С++ #13
BumerangSP,
Ссылка тоже? По-моему только =.
Так это адрес же, а не ссылка
new/delete вполне могут быть. Тут наверно имеются в виду еще и френды: <<, >>, префиксная запятая.
Так то вроде могут, но на самом деле там все немного запутано. Могут быть перегружены operator new и operator delete, так у Мейерса в 8 правиле написано
Вот здесь хотелось бы почитать об этом. Т.е. когда нужно, например, преобразовать тип класса A в int?
А какой из операторов? static_cast который? Или пользовательский? А как же преобразование с помощью конструктора?
Наверное, имели ввиду operator (имя_типа)(), только с помощью него можно преобразовать во встроенный тип. А с конструктором то, наверное, не получится, ведь тогда это должен быть конструктор преобразования для встроенного типа (что-то вроде int(const A&), а встроенные типы изменять нельзя
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
25.06.2013, 22:13     Теория по С++ #14
Цитата Сообщение от ViktorKozlov Посмотреть сообщение
Так это адрес же, а не ссылка
& - признак ссылки. А адрес - это оператор-функция? Что-то видимо не так мной понято. Как я понял вопрос из области: "что может быть сгенерировано компилятором для класса?" Так вот один из четырех - оператор =

Цитата Сообщение от ViktorKozlov Посмотреть сообщение
Так то вроде могут, но на самом деле там все немного запутано. Могут быть перегружены operator new и operator delete
Но ведь могут Причем с любым количеством аргументов. Да и деструктор явно вызывается специально только из-за особенно перегруженного new.
Цитата Сообщение от ViktorKozlov Посмотреть сообщение
Наверное, имели ввиду operator (имя_типа)(), только с помощью него можно преобразовать во встроенный тип
Пример можно?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11801 / 6780 / 765
Регистрация: 27.09.2012
Сообщений: 16,833
Записей в блоге: 2
Завершенные тесты: 1
25.06.2013, 22:20     Теория по С++ #15
Цитата Сообщение от BumerangSP Посмотреть сообщение
Пример можно?
http://ideone.com/th4XPv
BumerangSP
25.06.2013, 22:32
  #16

Не по теме:

@Croessmah, ну, в обсчем-то так.

ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
25.06.2013, 22:34     Теория по С++ #17
Цитата Сообщение от BumerangSP Посмотреть сообщение
& - признак ссылки. А адрес - это оператор-функция? Что-то видимо не так мной понято. Как я понял вопрос из области: "что может быть сгенерировано компилятором для класса?" Так вот один из четырех - оператор =
Так ссылку и нельзя перегружать, да она и вообще вроде как оператором не является
Цитата Сообщение от BumerangSP Посмотреть сообщение
Но ведь могут Причем с любым количеством аргументов. Да и деструктор явно вызывается специально только из-за особенно перегруженного new.
Ну это да, но new и operator new - совершенно разные вещи. У new стандартное поведение, а он уже вызывает operator new для класса (или глобальный, если нет для класса), а потом конструктор, при условии, что operator new возвратил не ноль
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
25.06.2013, 22:53     Теория по С++ #18
Цитата Сообщение от ViktorKozlov Посмотреть сообщение
Так ссылку и нельзя перегружать, да она и вообще вроде как оператором не является
@ViktorKozlov, а вопрос-то изначально был "какие-оператор функции...")
Цитата Сообщение от ViktorKozlov Посмотреть сообщение
У new стандартное поведение, а он уже вызывает operator new для класса
Т.е. сначала вызывается какой-то new, который затем смотрит, какую версию (глобальную, либо для класса) вызвать? Ссылку на прочтение можно? Как по мне, так если в классе есть перегрузка, то она вызывается вместо глобального new, без каких-либо телодвижений. Конечно, можно просто перегрузить и глобальный new.
Кстати, от сути отдаляемся, вопрос был: "Какие операции языка С++ не могут быть перегружены в классах объектов?"
Что есть перегрузка? Одинаковые имена - разное количество аргументов с типами и возвращаемые значения. По сути, перегрузку new ведь можно отнести к этому определению?
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
25.06.2013, 23:14     Теория по С++ #19
Цитата Сообщение от BumerangSP Посмотреть сообщение
@ViktorKozlov, а вопрос-то изначально был "какие-оператор функции...")
Так операция взятия адреса & как раз и является унарной оператор-функцией
Цитата Сообщение от BumerangSP Посмотреть сообщение
Т.е. сначала вызывается какой-то new, который затем смотрит, какую версию (глобальную, либо для класса) вызвать?
Да, operator new - это статическая функция (без разницы, писать static перед ней или нет), и если определена в классе, для которого вызывается, то вызывается версия класса, в противном случае - глобальная
Цитата Сообщение от BumerangSP Посмотреть сообщение
Ссылку на прочтение можно?
Подробно про это написано в книге "Скотт Мейерс - Наиболее эффективное использование C++", глава 8
Еще много написано в книге С. Липпмана "Язык программирования C++", 4 издание, глава 18.1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2013, 23:28     Теория по С++
Еще ссылки по теме:

теория C++
Теория по С++ C++
Теория по С++ C++

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

Или воспользуйтесь поиском по форуму:
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
25.06.2013, 23:28     Теория по С++ #20
По первому вопросу видимо неразбериха с терминологией .

По поводу new имеется в виду new-выражение? Тогда ясно, о чем Вы. Но, думаю, все же можно по вопросу ответить, что new/delete туда входят имхо.
Yandex
Объявления
25.06.2013, 23:28     Теория по С++
Ответ Создать тему
Опции темы

Текущее время: 13:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru