Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Знаю ли я С++? Проверка и помощь ответов на вопросы.. 
:(
    Опции темы
The Thing
Дата 14.2.2007, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 286
Регистрация: 6.9.2004

Репутация: нет
Всего: 3



На сайте RSDN встретил такое вот сборище тестовых вопросов по Си++.

Я решил себя проверить. Вроде бы все понятно, но некоторое пытаюсь сам себе рассказать что это такое все выглядит след образом "ну это..."  ! Кое чего вообще не знаю!
вот хотелось бы ниже вам привести пример версий того, что как я думаю знаю. И прошу помочь мне на те вопросы которые не знаю.

БОЛЬШАЯ ПРОСЬБА, ТЕ КТО НЕ ЗНАЕТ НА 100% ЧТО ТО, ЧТО ОНИ ГОВОРЯТ ИМЕННО ТАК, НИ ПИСАТЬ, НИ ФИЛОСОФСТВОВАТЬ НЕ НАДО!
МЕНЯ ИНТЕРЕСУЮТ ИСКЛЮЧИТЕЛЬНО 100% ВЕРНЫЕ ОТВЕТЫ, В ТАКОМ ВИДЕ, В КОТОРОМ БЫ Я СМОГ ОТВЕТИТЬ ЛЮДЯМ НА СОБЕСЕДОВАНИИ!


Вопросы возникли в следующих пунктах:
2,3,4,9,30,31,33,34,35,40,41,42,44,45,46,47,49

Пожалуйста прокомментируйте каждый из ответов на сколько они верны.
Что бы мне было понятно я правильно ответил или этот вопрос просто незаметили.

БОЛЬШОЕ ИСКРЕННЕЕ СПАСИБО ВСЕМ КТО ОТКЛИКНУЛСЯ!

Код


Как самого себя проверить на знание С++ первые 49 вопросов
1. Что определяет класс? Чем отличается класс от объекта?

Страуструп 2:
 Класс - это тип; он определяет поведение связанных с ним объектов: их создание, обработку и уничтожение.
 
 Мое - не очень нравится:
 Объект класса - это область памяти, описываемая классом.

2. Можно ли объявлять массив объектов? А массив классов?

Объектов - можно.
Классов - нельзя.

Объект - это область памяти, можно выделить память под множество объектов.
Класс - это описание объекта, почему нельзя.. объяснить сложно... класс это описание для компилятора или интерпретатора..!

3. Разрешается ли объявлять указатель на объект? А указатель на класс?
на Объект - можно, это область памяти.
на Класс - нельзя, опять же что и в пред вопросе.

4. Допускается ли передавать объекты в качестве параметров, и какими способами? А возвращать как результат?
В качестве параметров можно, по указателю и по ссылке.
Возращать как результат? не совсем понял - это числом что ли?.. если так, то нельзя.


5. Как называется использование объекта одного класса в качестве поля другого класса?
Член класса.

6. Является ли структура классом? Чем класс отличается от структуры?
Да, наверное. Тем, что по умолчанию в структуре используется часть public, а в классе private

7. Какие ключевые слова в С++ обозначают класс?
class

8. Объясните принцип инкапсуляции.
Инкапсуляция - это процесс отделения друг от друга элементов объекта, определяющих его устройство и поведение.
Другими словами, отделение интерфейса от реализации
Взято с "Некоторые аспекты использования “свойств” в языке программирования C++" (http://iaz.simb.ru/article/PropertyCPP.htm)

9. Что такое композиция?
Не знаю!

10. Для чего используются ключевые слова public и private?
Для ограничение области видимости данных.
Данные части private доступны только внутри класса, public общедоступны.

11. Можно ли использовать ключевые слова public и private в структуре?
Да

12. Существуют ли ограничения на использование public и private в классе? А в структуре?
Нет

13. Обязательно ли делать поля класса приватными?
Нет

14. Что такое метод? Как вызывается метод?
Метод - это функция класса. Также, как и функция, только сначало надо указать объект или указатель на него.

15. Может ли метод быть приватный?
Да

16. Как определить метод непосредственно внутри класса? А вне класса? Чем эти определения отличаются?
Метод описыввается внутри самого класса как простая функция.
Вне класса - аналогично, но еще перед название добавляется имя класса к которому принадлежик метод отделяется двойным двоеточием.
В самом классе должен быть указан прототип функции.

17. Можно в методах присваивать параметрам значения по умолчанию?
Да

18. Что обозначается ключевым словом this?
Указатель объекта на самого себя.

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

20. Может ли константный метод вызываться для объектов-переменных? А обычный метод — для объектов-констант?
Может ли константный метод вызываться для объектов-переменных: Да
А обычный метод — для объектов-констант:Нет

21. Объясните принцип полиморфизма.
Он заключается в способности объекта во время выполнения программы динамически изменять свои свойства.

22. Сколько места в памяти занимает объект класса? Как это узнать?
Вызвать функцию sizeof()

23. Каков размер «пустого» объекта?
1 байт (измерил :))

24. Влияют ли методы на размер объекта?
Нет.

25. Одинаков ли размер класса и аналогичной структуры?
Да

26. Какие операции нельзя перегружать? Как вы думаете, почему?
Те которые выходят за рамки стандартно используемых операций в с++ ( + - [] <  и т. д.)

27. Можно ли перегружать операции для встроенных типов данных?
Нет

28. Можно ли при перегрузке изменить приоритет операции?
Нет

29. Можно ли определить новую операцию?
Нет

30. Перечислите особенности перегрузки операций как методов класса. Чем отличается перегрузка внешним образом от перегрузки как метода класса?
Не понял. Наверное имеется ввиду перегрузка методов класса? Особенности? Наверное функции должны хоть чем-нибудь отличаться.
Не знаю.

31. Какой результат должны возвращать операции с присваиванием?
Не знаю. Если речь идет об объектах.. наверное ссылку на сам объект, а так наверное константу.

32. Как различаются перегруженная префиксная и постфиксная операции инкремента и декремента?
Префиксная форма объявляется как операция-член класса, которая не имеет аргументов, либо как дружественная операция, которая имеет один аргумент, представляющий собой ссылку на объект данного класса. 
Постфиксная форма объявляется как операция-член класса, которая имеет один аргумент типа int, либо как дружественная операция, которая имеет два аргумента: ссылку на объект данного класса и аргумент типа int. Аргумент типа int на самом деле не используется. Фактически он имеет нулевое значение. 
http://athena.vvsu.ru/carina/oop/theory4.html
Код

class X { 
public: 
X & operator ++(); //Префиксная форма 
X & operator ++(int); // Постфиксная форма 
}; 
class Y { 
public: 
friend Y & operator ++(Y &); //Префиксная форма 
friend Y & operator ++(Y &,int); // Постфиксная форма 
}; 


33. Что означает выражение *this? В каких случаях оно используется?
Операция разыменовывания. Используется для возвращения значения объекта.
Где используется не знаю.

34. Какие операции не рекомендуется перегружать как методы класса? Почему?
Не знаю.

35. Какие операции разрешается перегружать только как методы класса?
Не знаю.

36. Дайте определение дружественной функции. Как объявляется дружественная функция? А как определяется?
ОБЪЯВЛЕНИЕ - внутри класса friend ФУНКЦИЯ
Определение, как обычный метод.
пожалуйста уточните, если надо.

37. Дайте определение конструктора. Каково назначение конструктора? Перечислите отличия конструктора от метода.
Конструктор - это функция вызываемая только один раз по умолчанию при создании объекта.

38. Сколько конструкторов может быть в классе? Допускается ли перегрузка конструкторов? Какие виды конструкторов создаются по умолчанию?
Сколько угодно.
Да.
Без аргументов и конструктор копирования.

39. Может ли конструктор быть приватным? Какие последствия влечет за собой объявление конструктора приватным?
Нет.
Невозможность создать объект класса.

40. Приведите несколько случаев, когда конструктор вызывается неявно.
Случай 1:
int a = 0, b=1;
a = b + 1;
Неявно вызывается конструктор int(1);

еще есть какой-то случай с самим конструктором... не помню..

41. Как проинициализировать динамическую переменную?
Не знаю. Инициализация - это ведь первое присвоение значения данному.
Может имеется ввиду конструктор?
A *var = new A(...);

42. Как объявить константу в классе? Можно ли объявить дробную константу?
через const.
Дробную... float/double что ли?

43. Каким образом разрешается инициализировать константные поля в классе?
Требуется описать ее значение в каждом конструкторе.

44. В каком порядке инициализируются поля в классе? Совпадает ли этот порядок с порядком перечисления инициализаторов в списке инициализации конструктора?
Не знаю.

45. Какие конструкции С++ разрешается использовать в списке инициализации качестве инициализирующих выражений?
Не знаю. Не пойму о чем речь. О выражениях при инициализации? Любое возвращающее значение нужного типа.

46. Какой вид конструктора фактически является конструктором преобразования типов?
конструктор копирования

47. Для чего нужны функции преобразования? Как объявить такую функцию в классе?
Не знаю.

48. Как запретить неявное преобразование типа, выполняемое конструктором инициализации?
Выполнить двойное преобразование. Двойное неявное преобразование несработает.

49. Какие проблемы могут возникнуть при определении функций преобразования?
Не знаю.


Добавлено @ 17:23 
на 33.
Может быть в случаях перегрузки операторов присваивания и тому подобное... когда нужно вернуть не указатель а сам объект.


--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
Rockie
Дата 14.2.2007, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата

Пожалуйста прокомментируйте каждый из ответов на сколько они верны.

делать нечего
Цитата(The Thing @  14.2.2007,  17:20 Найти цитируемый пост)
МЕНЯ ИНТЕРЕСУЮТ ИСКЛЮЧИТЕЛЬНО 100% ВЕРНЫЕ ОТВЕТЫ, В ТАКОМ ВИДЕ, В КОТОРОМ БЫ Я СМОГ ОТВЕТИТЬ ЛЮДЯМ НА СОБЕСЕДОВАНИИ!

Гы smile Во-первых imho на любой верный ответ может найтись еще более верный, как ты намерен оценить 100% правильности - непонятно. А во-вторых - ну разжуют тебе все ответы, потратят свое время. На собеседовании тебе зададут другой, третий вопрос и ты сядешь в лужу. Вопросы которые ты привел освещаются на первых страницах книг по ООП и С++


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
zkv
Дата 14.2.2007, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



9 - тоже не знаю, расскажите плиз smile
20 - не уверен, расскажите плиз
22 - неверно, если например объект будет размещен при помощи new
23 - непонятно что значит "пустой объект", если объект класса без членов, то размер не определен
24 - неверно, для виртуальных методов создается таблица виртуальных функций
26 - не помню, подскажите smile
PM MAIL   Вверх
JackYF
Дата 14.2.2007, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Гм... на 26-ой:

.
? :
sizeof
& (взятие адреса)
::

Вроде все. Но за достоверность не ручаюсь.

Добавлено @ 18:20 
4. Возвращать как результат - конечно можно, почему нет?
21. Имхо не очень верно. Как правильно - в книги.
22. Верно. Какая разница, где выделен объект? Место под него отводится того же размера.
30. Есть небольшая разница... если бинарная операция перегружена как объект класса, то она будет вызвана, только если левый операнд является объектом этого класса. В случае внешней перегрузки возможен вызов функции, если левый операнд приводится к классу объекта (для которого перегружена операция).
32. Да, ссылку на объект.
33. ... и различаются возвращаемые значения (и их тип тоже). В одном случае - ссылка, в другом - константная копия.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
zkv
Дата 14.2.2007, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(The Thing @  14.2.2007,  17:20 Найти цитируемый пост)
22. Сколько места в памяти занимает объект класса? Как это узнать?
Вызвать функцию sizeof()

Цитата(JackYF @  14.2.2007,  18:10 Найти цитируемый пост)
22. Верно. Какая разница, где выделен объект? Место под него отводится того же размера.

спорно, я имел в виду sizeof(имя_объекта_класса), но ведь класс может иметь динамические данные, не знаю как в этом случае считать, их размер входит в размер объект класса, я думаю да, тогда sizeof не поможет.
 
Цитата(The Thing @  14.2.2007,  17:20 Найти цитируемый пост)
БОЛЬШАЯ ПРОСЬБА, ТЕ КТО НЕ ЗНАЕТ НА 100% ЧТО ТО, ЧТО ОНИ ГОВОРЯТ ИМЕННО ТАК, НИ ПИСАТЬ, НИ ФИЛОСОФСТВОВАТЬ НЕ НАДО!
МЕНЯ ИНТЕРЕСУЮТ ИСКЛЮЧИТЕЛЬНО 100% ВЕРНЫЕ ОТВЕТЫ, В ТАКОМ ВИДЕ, В КОТОРОМ БЫ Я СМОГ ОТВЕТИТЬ ЛЮДЯМ НА СОБЕСЕДОВАНИИ!

100% гарантию дают только в морге  smile, а в споре рождается истина smile, а тема интересная, спасибо
PM MAIL   Вверх
JackYF
Дата 14.2.2007, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Если класс имеет динамические данные, то никто, кроме метода данного класса типа "unsigned int capacity()"(если его, конечно, написали предусмотрительные программисты) не сможет узнать, сколько же в памяти занимает объект.

P.S. Разве что rtl. smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
skyboy
Дата 14.2.2007, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(The Thing @  14.2.2007,  16:20 Найти цитируемый пост)
4. Допускается ли передавать объекты в качестве параметров, и какими способами? А возвращать как результат?
В качестве параметров можно, по указателю и по ссылке.
Возращать как результат? не совсем понял - это числом что ли?.. если так, то нельзя.

можно и передавать, и возвращать. в обоих случаях - по ссылке("по ссылке" == "по указателю"; есть два варианта: "по ссылке" и "по значению"). впрочем, можно повыпендриваться и заявить, что в .NET - вариации С++ есть __value классы, которые могут передаваться/возвращаться и по ссылке, и по значению.
Цитата(The Thing @  14.2.2007,  16:20 Найти цитируемый пост)
5. Как называется использование объекта одного класса в качестве поля другого класса?

не уверен на 100%(не я терминологию придумывал - порой она кажется мне нелогичной), по-моему это "композиция"
Цитата(The Thing @  14.2.2007,  16:20 Найти цитируемый пост)
6. Является ли структура классом? Чем класс отличается от структуры?

нет наследования(описать в одной структуре поля, а в другой структуре просто дополнить), полиморфизма(две разнотипные структуры - это две разнотипные структуры; в ООП же можно объект класса-потомка использовать вместо объекта класса-родителя) и инкапсуляции(нет областей видимости). в принципе, нет методов. можно реализовать в виде хранения адреса функции, но указатель на this автоматически передаваться не будет - работа будет явной и довольно некрасивой.
Цитата(The Thing @  14.2.2007,  16:20 Найти цитируемый пост)
10. Для чего используются ключевые слова public и private?
Для ограничение области видимости данных.
Данные части private доступны только внутри класса, public общедоступны.

А есть ещё protected: доступ только для классов-потомков.

Цитата(The Thing @  14.2.2007,  16:20 Найти цитируемый пост)
8. Объясните принцип инкапсуляции.
Инкапсуляция - это процесс отделения друг от друга элементов объекта, определяющих его устройство и поведение.
Другими словами, отделение интерфейса от реализации

не просто отделение. сокрытие реализации. 
отделить интерфейс от реализации - это выделить метод "сложить" и методы, которые использует метод "сложить", "получить первое слагаемое"/"получить второе слагаемое". А сокрытие - когда мы ко всему ещё и скрываем методы "получить первое слагаемое"/"получить второе слагаемое" в private/protected-секцию, чтоб никто, кроме нас, даже не догадывался оих существовании.
Цитата(The Thing @  14.2.2007,  16:20 Найти цитируемый пост)
13. Обязательно ли делать поля класса приватными?
Нет

сильно желательно. принцип инкапсуляции - это не догма, потому сильно всё зависит от конкретной задачи и конкретных условий.
Цитата(The Thing @  14.2.2007,  16:20 Найти цитируемый пост)
14. Что такое метод? Как вызывается метод?
Метод - это функция класса. Также, как и функция, только сначало надо указать объект или указатель на него.

Метод - это функция, имеющая доступ ко всем данным, хранящимся в объекте и другим методам этого объекта(объект - как конкретная реализация класса). "Метод вызывается" - офигенная фраза. имеется в виду внутренний механизм(всякие таблицы динамических/виртуальных методов; inheritable и прочее) или синтаксис вызова методов? я улыбаюсь с вопрошающего.
Цитата(The Thing @  14.2.2007,  16:20 Найти цитируемый пост)
16. Как определить метод непосредственно внутри класса? А вне класса? Чем эти определения отличаются?

"вне класса" - это, по всей видимости, делегирование(механизм такой).
Цитата(The Thing @  14.2.2007,  16:20 Найти цитируемый пост)
17. Можно в методах присваивать параметрам значения по умолчанию?

зависит от компилятора.
Цитата(The Thing @  14.2.2007,  16:20 Найти цитируемый пост)
18. Что обозначается ключевым словом this?
Указатель объекта на самого себя.

в пределах метода класса - это указатель на объект, вызвавший свой метод. в других местах "this", скорее всего, вызовет сообщение об ошибке.
Цитата(The Thing @  14.2.2007,  16:20 Найти цитируемый пост)
21. Объясните принцип полиморфизма.

объект класса-потомка может выступать, как объект класса-родителя.

PM MAIL   Вверх
JackYF
Дата 14.2.2007, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(skyboy @  14.2.2007,  18:33 Найти цитируемый пост)
нет наследования(описать в одной структуре поля, а в другой структуре просто дополнить), полиморфизма(две разнотипные структуры - это две разнотипные структуры; в ООП же можно объект класса-потомка использовать вместо объекта класса-родителя) и инкапсуляции(нет областей видимости). в принципе, нет методов. можно реализовать в виде хранения адреса функции, но указатель на this автоматически передаваться не будет - работа будет явной и довольно некрасивой.


Нет методов? Нет наследования? Ты когда последний раз со структурами работал?

Цитата(skyboy @  14.2.2007,  18:33 Найти цитируемый пост)
Цитата(The Thing @  14.2.2007,  16:20 Найти цитируемый пост)
17. Можно в методах присваивать параметрам значения по умолчанию?

Цитата(skyboy @  14.2.2007,  18:33 Найти цитируемый пост)
зависит от компилятора.


Гм. По стандарту можно. И покажи мне компилятор, в котором нельзя.

Добавлено @ 18:40 
P.S. BC3.1 компилятором не считаю.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
nerezus
Дата 14.2.2007, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Цитата

Цитата

5. Как называется использование объекта одного класса в качестве поля другого класса?


не уверен на 100%(не я терминологию придумывал - порой она кажется мне нелогичной), по-моему это "композиция"
 вроде агрегация

Цитата

Цитата

17. Можно в методах присваивать параметрам значения по умолчанию?


зависит от компилятора.
 можно.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Earnest
Дата 14.2.2007, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(The Thing @  14.2.2007,  18:20 Найти цитируемый пост)
3. Разрешается ли объявлять указатель на объект? А указатель на класс?
на Объект - можно, это область памяти.
на Класс - нельзя, опять же что и в пред вопросе.

Я думаю, как раз наоборот. Объявляется именно указатель на класс (т.к. это тип). А вот инициализируется он указателем не объект. Мы пишем: CMyClass* ptr. Где тут объект?

Цитата(The Thing @  14.2.2007,  18:20 Найти цитируемый пост)
4. Допускается ли передавать объекты в качестве параметров, и какими способами? А возвращать как результат?
В качестве параметров можно, по указателю и по ссылке.
Возращать как результат? не совсем понял - это числом что ли?.. если так, то нельзя.

Можно возвращать как результат, если есть явный или неявный конструктор копирования. То же самое при передаче объекта по значению.
Цитата(The Thing @  14.2.2007,  18:20 Найти цитируемый пост)
5. Как называется использование объекта одного класса в качестве поля другого класса?
Член класса.

Это включение (embedding).

Цитата(The Thing @  14.2.2007,  18:20 Найти цитируемый пост)
7. Какие ключевые слова в С++ обозначают класс?
class

и struct тоже.

Цитата(The Thing @  14.2.2007,  18:20 Найти цитируемый пост)
8. Объясните принцип инкапсуляции.
Инкапсуляция - это процесс отделения друг от друга элементов объекта, определяющих его устройство и поведение.

Инкапсюляция - это, буквально, сокрытие. Т.е. скрытие ненужных подробностей  (деталей реализации) от клиентов. По принципу: меньше знаешь - крепче спишь. Отделение интерфейса от реализации - это немного другое.

Цитата(The Thing @  14.2.2007,  18:20 Найти цитируемый пост)
19. Зачем нужны константные методы? Чем отличается определение константного метода от обычного?
Константные методы гарантируют, что все вычисления в методе не выполнят никаких изменений в объекте класса.

Ничего они не гарантируют, а только обещают. Другими словами, константность - это выражение намерений. Да, компилятор будет ругаться при попытке что-то изменить в константном методе, но это легко обойти. И кроме того, есть слово mutable. Т.о. константный метод обещает, что логическое состояние объекта не изменится. (не путать с физическим, т.е. с изменением памяти, что вполне может быть).

Цитата(The Thing @  14.2.2007,  18:20 Найти цитируемый пост)
21. Объясните принцип полиморфизма.
Он заключается в способности объекта во время выполнения программы динамически изменять свои свойства

Полиморфизм означает, что один и тот же интерфейс может приводить к разным действиям (вызовам разных функций).
Кроме того "во время выполнения программы" - это только один вид полиморфизма, динамический. Есть еще статический, или полиморфизм времени компиляции, что в С++ реализуется шаблонами.
Цитата(The Thing @  14.2.2007,  18:20 Найти цитируемый пост)
22. Сколько места в памяти занимает объект класса? Как это узнать?
Вызвать функцию sizeof()

Не очень корректный вопрос. Объект может выделять для своих нужд динамическую память - ее он ведь тоже "занимает". В этотм случае никак не узнать, если не смотреть внутрь. 

Цитата(The Thing @  14.2.2007,  18:20 Найти цитируемый пост)
23. Каков размер «пустого» объекта?
1 байт (измерил smile)

Этот только для неполиморфных объектов. А полиморфные - как минимум 4 байта (указатель на vtable)

Цитата(The Thing @  14.2.2007,  18:20 Найти цитируемый пост)
24. Влияют ли методы на размер объекта?
Нет.

В некотором смысле влияют: как только появляется один виртуальный метод, добавляется указатель на vtable.

Цитата(The Thing @  14.2.2007,  18:20 Найти цитируемый пост)
30. Перечислите особенности перегрузки операций как методов класса. Чем отличается перегрузка внешним образом от перегрузки как метода класса?
Не понял. Наверное имеется ввиду перегрузка методов класса? Особенности? Наверное функции должны хоть чем-нибудь отличаться.
Не знаю.

Числом параметров. Операции в классе имеют на один аргумент меньше, т.к. есть неявный левый аргумент this.
Цитата(The Thing @  14.2.2007,  18:20 Найти цитируемый пост)
31. Какой результат должны возвращать операции с присваиванием?
Не знаю. Если речь идет об объектах.. наверное ссылку на сам объект, а так наверное константу.

Ссылку на себя. Т.е. *this. Чтобы можно было писать a = b = с = 4, как со встроенными типами.
Правда, это не требования стандарта, а только рекомендации "кошерного" программирования. Если ты напишешь по-другому (вернешь void, например), компилятор проглотит.

Цитата(The Thing @  14.2.2007,  18:20 Найти цитируемый пост)
39. Может ли конструктор быть приватным? Какие последствия влечет за собой объявление конструктора приватным?
Нет.
Невозможность создать объект класса.

Может. Объект класса как раз создать можно (в функции-члене класса). И такой прием применяется, например, в реализации паттерна "синглетон". А вот возможность наследования это обрубает - если нет ни одного не-private конструктора.

Дальше не читала.


--------------------
...
PM   Вверх
Fazil6
Дата 14.2.2007, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата

5. Как называется использование объекта одного класса в качестве поля другого класса?
Член класса.

думаю в виду имеется совсем не это. Композиция здесь имеется в виду. Это, кстати, и есть ответ на вопрос №9

Добавлено @ 20:00 
Цитата

3. Разрешается ли объявлять указатель на объект? А указатель на класс?
на Объект - можно, это область памяти.
на Класс - нельзя, опять же что и в пред вопросе.

интересно увидеть как выглядит объявление указателя на объект    smile 

Цитата

6. Является ли структура классом? Чем класс отличается от структуры?
Да, наверное. Тем, что по умолчанию в структуре используется часть public, а в классе private

7. Какие ключевые слова в С++ обозначают класс?
class

ответы протеворечат друг другу. Если структура является классом (что верно), то почему этого слова не в ответе?
PM MAIL   Вверх
Earnest
Дата 14.2.2007, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(The Thing @  14.2.2007,  18:20 Найти цитируемый пост)
46. Какой вид конструктора фактически является конструктором преобразования типов?
конструктор копирования

Нет, не-explicit конструктор , который может быть вызван с одним аргументом (причем другого типа иначе какое это преобразоване). Сюда же относится конструктор со многими аргументами, если все кроме одного заданы по-умолчанию.

Цитата(The Thing @  14.2.2007,  18:20 Найти цитируемый пост)
47. Для чего нужны функции преобразования? Как объявить такую функцию в классе?
Не знаю.


operator TYPE() const { retun ...; }
Причем const желателен, но не обязателен. Зачем нужен... Для неявного преобразования. Скажем, есть функция Func, которая принимает int, и есть объект a класса, который приводится к int. Тогда можно написать Func(a). 
Оператор преобразования - в некотором смысле обратен конструктору с одним аргументом: если нужно привести к встроенному типу, работает только оперетор преобразования. Если наоборот, встроенный тип нужно привести к пользовательскому, работает конструктор. 
Пример: функтия void MyFunc (const CMyClass&); если CmyClass имеет не-explicit конструктор с аргументом int, можно запросто написать MyFunc(5);
Если требуется преобразование между пользовательскими типами, то одинаково работают оба метода.

Цитата(The Thing @  14.2.2007,  18:20 Найти цитируемый пост)
48. Как запретить неявное преобразование типа, выполняемое конструктором инициализации?
Выполнить двойное преобразование. Двойное неявное преобразование несработает.

Нет, объявить конструктор explicit. Это относится только к конструкторам, описанным в п 46 - остальные и так не могут работать как преобразователи.

Цитата(The Thing @  14.2.2007,  18:20 Найти цитируемый пост)
49. Какие проблемы могут возникнуть при определении функций преобразования?
Не знаю.

Неопределенность. Это в лучшем случае, т.к. ее выявит компилятор. А в худшем, будет сделан вовсе не тот вызов, который ты, возможно, имел в виду. 




--------------------
...
PM   Вверх
Fazil6
Дата 14.2.2007, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата

26. Какие операции нельзя перегружать? Как вы думаете, почему?
Те которые выходят за рамки стандартно используемых операций в с++ ( + - [] <  и т. д.)

эти операции как раз перегружать можно.
Полььзователь не может определить:
- точка(выбор члена)
- :: (разрешение контекста)
- .* (выбор через указатель на член)
перегружать их нельзя потому, что первый операнд у них имя, а не значение.
Нельзя перегрузить условный оператор ?
Нельзя перегрузить операторы sizeof и typeid 

Также не рекомендуется перегружать &&, || и запятая потому, что невозможно полностью реализовать семантику встроенных аналогов
PM MAIL   Вверх
Fazil6
Дата 14.2.2007, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата

37. Дайте определение конструктора. Каково назначение конструктора? Перечислите отличия конструктора от метода.
Конструктор - это функция вызываемая только один раз по умолчанию при создании объекта.

Конструктор - это функция-член имя, которой совпадает с именем класса.
Вотличие от метода конструктор не возвращает значение, не может быть виртуальным(вообще не действует в конструкторах), может содержать список инициализации, не может быть статическим. Думаю, можно при желании и еще отличия найти.
explicit опять же.

Это сообщение отредактировал(а) Fazil6 - 14.2.2007, 23:28
PM MAIL   Вверх
skyboy
Дата 14.2.2007, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(Fazil6 @  14.2.2007,  18:55 Найти цитируемый пост)
интересно увидеть как выглядит объявление указателя на объект

TMyClass** a? smile
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0699 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.