- •ВВЕДЕНИЕ
- •КЛАССЫ
- •Описание объектов
- •Указатель this
- •Конструкторы
- •Конструктор копирования
- •Статические элементы класса
- •Статические методы
- •Дружественные функции и классы
- •Дружественные функции
- •Дружественный класс
- •Деструкторы
- •Перегрузка унарных операций
- •Перегрузка бинарных операций
- •Перегрузка операции присваивания
- •Перегрузка операции приведения типа
- •НАСЛЕДОВАНИЕ
- •Ключи доступа
- •Простое наследование
- •Правила наследования методов
- •Абстрактные классы
- •ОБРАБОТКА ИСКЛЮЧИТЕЛЬНЫХ СИТУАЦИЙ
- •Синтаксис исключений
- •Перехват исключений
- •Список исключений
- •Иерархии исключений
- •СТАНДАРТНАЯ БИБЛИОТЕКА
- •Форматирование данных
- •Флаги и форматирующие методы
- •Манипуляторы
- •Методы обмена с потоком
- •Файловые потоки
- •СТРОКИ
- •Операции
- •Функции
- •Преобразование строк
- •Поиск подстрок
- •Сравнение частей строк
- •Получение характеристик строк
- •КОНТЕЙНЕРНЫЕ КЛАССЫ
- •Последовательные контейнеры
- •Векторы
- •Двусторонние очереди
- •Списки
- •Ассоциативные контейнеры
- •Словари
- •Словари с дубликатами (multimap)
- •ПРИЛОЖЕНИЕ 1. ШАБЛОНЫ ФУНКЦИЙ
- •ПРИЛОЖЕНИЕ 2. ШАБЛОНЫ КЛАССОВ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК
health (he), ammo (am), skin (sk), name (0) {};
Поля перечисляются через запятую. Для каждого поля в скобках указывается инициализирующее значение, которое может быть выражением. Таким образом инициализируются поля-константы, поля-ссылки и поля-объекты. В последнем случае будет вызван конструктор, соответствующий указанным в скобках параметрам.
Задание
Добавьте в разработанный вами класс-калькулятор конструктор, инициализирующий объект.
Конструктор копирования
Конструктор копирования – это специальный вид конструктора, получающий в качестве единственного параметра указатель на объект этого же класса:
T :: T(const &T) {/*тело конструктора*/}
Здесь T – имя класса.
Этот конструктор вызывается в тех случаях, когда новый объект создается путем копирования существующего:
–при описании нового объекта с инициализацией другим объектом;
–передаче объекта в функцию по значению;
–возврате объекта из функции.
Если программист не указал ни одного конструктора копирования, компилятор создает его автоматически.
Конструктор копирования для класса monstr: monstr :: (const monstr &M) {
if (M.name) {
name = new char [strlen (M.name) +1];
strcpy(name, M.name);}
else name = 0;
health =M.health; ammo= M.ammo; skin=M.skin;
}
…
monstr Vasia (blue);
monstr Super = Vasia; // работает конструктор копирования
monstr *m=new monstr (“Ork”);
monstr Green = *m; // работает конструктор копирования
12
Статические элементы класса
С помощью модификатора static можно описать статические поля и методы класса. Их можно рассматривать как глобальные переменные или функции, доступные только в пределах области класса.
Статические поля
Статические поля применяются для хранения данных, общих для всех объектов класса. Эти поля существуют для всех объектов класса в единственном экземпляре, т.е. не дублируются.
Имеются следующие особенности у статических полей.
1. Память под них выделяется один раз при их инициализации независимо от числа созданных объектов и инициализируются с помощью операции доступа к области действия, а не операции выбора(определение должно быть записано вне функций):
class A {
public:
static int count; // объявление класса
};
…
int A : : count; // определение в глобальной области
//по умолчанию инициализируется нулем
//int A : : count =10; пример инициализации значением 10.
2.Статические поля доступны как через имя класса, так и через имя
объекта:
A *a, b;
…
cout << A: :count << a->count <<b.count;
//будет выведено одно и то же
3.На статические поля распространяется действие специфического доступа, поэтому статические поля, описанные как private, нельзя изменить с помощью операции доступа к области действия, как и описано выше. Это можно сделать только с помощью статических методов.
4.Память, занимаемая статическим полем, не учитывается при определении размера объекта с помощью операции sizeof.
Статические методы
Статические методы предназначены для обращения к статическим полям класса. Они могут обращаться непосредственно только к статическим полям и вызывать только другие статические методы класса, потому что им не переда-
13