- •Конспект по "Объектно-ориентированному программированию".
- •1. Что такое объект? Понятия "состояние" и "поведение"?
- •2. Понятия "интерфейс" и "реализация"?
- •3. Понятия "класс" и "абстрактный тип данных"?
- •4. Основные категории классов?
- •5. Объявление класса? Общий вид объявления класса? Включение кода метода внутри объявления класса?
- •6. Особенности локальных классов?
- •7. Понятие inline-метода. Способы создания?
- •9. Константный объект? Константный метод?
- •10. Конструктор. Его назначение и синтаксические конструкции вызова конструктора?
- •11. Конструктор копирования. Общий вид и случаи вызова?
- •12. Что называется конструктором по умолчанию? Конструктором преобразования?
- •13. Основные свойства и правила использования конструкторов.
- •14. Деструктор. Вызов деструкторов (автоматический и явный).
- •15. Основные свойства и правила использования деструкторов.
- •16. Создание и уничтожение объектов.
- •17. Что такое наследование?
- •18. Понятия "базовый класс" и "производный класс"?
- •19. Принцип подстановки. Различие между понятиями "подкласс" и "подтип"?
- •20. Основные формы наследования?
- •21. Преимущества наследования?
- •22. Недостатки наследования?
- •23. Общая форма наследования классов? Спецификаторы доступа при наследовании?
- •24. Конструкторы и деструкторы производных классов? Порядок вызова конструкторов и деструкторов при множественном наследовании?
- •25. Множественное наследование. Общая форма?
- •26. Передача параметров в базовый класс. Назначение. Общая форма?
- •27. Указатели и ссылки на производные классы?
- •28. Виртуальная функция. Объявление виртуальной функции?
- •29. Чисто виртуальная функция. Общая форма чисто виртуальной функции?
- •30. Понятие "абстрактный класс".
- •31. Что такое полиморфизм? в каких формах он может существовать?
- •32. Понятие "перегрузка"?
- •33. Приведение типа. Неопределенность. Причины возникновения неопределенности и способы ее устранения?
- •34. Понятие "параметрическая перегрузка"?
- •35. Понятие "переопределение"? в чем заключается различие между перегрузкой и переопределением?
- •36. В чем заключается процесс уточнения?
- •37. Что такое шаблоны (или обобщенные функции)? Их назначение?
- •38. Функция-шаблон. Назначение функции-шаблона? Общий вид функции-шаблона?
- •39. Класс-шаблон. Общая форма класса-шаблона и экземпляра такого класса?
12. Что называется конструктором по умолчанию? Конструктором преобразования?
Конструктор, вызываемый без параметров, называется конструктором по умолчанию.Параметры, задаваемые по умолчанию, может содержать только один из конструкторов.
Пример класса, содержащего несколько конструкторов:
enum color {red, green, blue} // возможные значения цвета
class monstr
{
int health, ammo;
color skin;
char *name;
public:
monstr(in the=100, int am=10);
monstr(color sk);
monstr(char *nam);
int get_health()
{
return health;
}
int get_ammo()
{
return ammo;
}
…
};
// -------------------------------------
monstr::monstr(int he, int am)
{
health=he; ammo=am; skin=red; name=0;
}
// -------------------------------------
monstr::monstr(color sk)
{
switch(sk)
{
case red: health=100; ammo=10; skin=red; name=0; break;
case green: health=100; ammo=20; skin=green; name=0; break;
case blue: health=100; ammo=40; skin=blue; name=0; break;
}
}
// ------------------------------------
monstr::monstr(char *nam)
{
name=new char[strlen(nam)+1]; // длина строки +1 для хранения нуль-символа
strcpy(name, nam);
health=100; ammo=10; skin=red;
}
…
// ------------------------------------
monstr *m=new monstr("Ork");
monstr Green(green);
…
Первый конструктор в данном примере является конструктором по умолчанию, так как его можно вызвать без параметров.
При инициализации объектов класса monstrтребуемый конструктор будет вызван в зависимости от списка значений в скобках (компилятор распознает нужный вариант).
Конструктор преобразования – это конструктор класса, принимающий один параметр какого-либо другого типа, то есть осуществляющий преобразование из типа параметра в тип этого класса.
13. Основные свойства и правила использования конструкторов.
Основные свойства и правила использования конструкторов:
– конструктор имеет то же имя, что и класс, в котором он объявляется;
– конструктор не возвращает значения (даже типа void);
– в программе невозможно получить адрес конструктора (указатель на конструктор);
– класс может иметь несколько конструкторов с разными параметрами для разных видов инициализации;
– конструктор класса Х не может иметь аргумент типа Х;
– конструктор класса Х может иметь аргумент типа X& (ссылку на объект типа Х);
– конструктор может иметь аргументы, заданные по умолчанию;
– конструктор по умолчанию – это конструктор, который может быть вызван без аргументов;
– если конструктор не задан в программе, он будет автоматически сгенерирован компилятором для построения соответствующих объектов. Такой конструктор вызывает конструкторы по умолчанию для полей классов и конструкторы по умолчанию базовых (родительских) классов. Если класс содержит константы или ссылки, при попытке создания объекта класса будет выдана ошибка, так как их необходимо инициализировать конкретными значениями, что невозможно для конструктора по умолчанию. Все конструкторы, сгенерированные таким образом, имеют атрибут public;
– конструктор вызывается автоматически только при описании объекта;
– конструктор – это функция, но он не может быть виртуальным (его нельзя объявить с ключевым словом virtual);
– конструкторы нельзя описывать с модификаторами constиstatic;
– объект, содержащий конструктор, нельзя включить в виде компонента в объединение (union);
– конструктор не наследуется в производных классах. Если необходимо, то конструктор производного класса может вызывать конструкторы для его базовых (родительских) классов;
– конструктор, заданный в виде Х::Х&(const X&), называется конструктор копирования класса Х;
– для конструктора работает механизм доопределения имени. Например, можно рассмотреть конструкторы X::X(int), X::X(float)и т.п.;
– конструкторы глобальных объектов вызываются до вызова функции main. Локальные объекты создаются, как только становится активной область их действия. Конструктор запускается и при создании временного объекта (например, при передаче объекта из функции).