Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
umm_3690.pdf
Скачиваний:
24
Добавлен:
30.04.2015
Размер:
364.53 Кб
Скачать

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]