Программирование >>  Перегруженные имена функций и идентификаторы 

1 ... 41 42 43 [ 44 ] 45 46 47 ... 210


Конструкторы

Член функция с именем, совпадающим с именем ее класса, называется конструктором. Конструктор не имеет типа возвращаемого значения; он используется для конструирования значений с типом его класса. С помощью конструктора можно создавать новые объекты его типа, используя синтаксис:

typedef-имя ( список параметров opt )

Например:

complex zz = complex (1,2.3); cprint (complex (7.8,1.2));

Объекты, созданные таким образом, не имеют имени (если конструктор не использован как инициализатор, как это б1ло с zz выше), и их время жизни ограничено областью видимости, в которой они созданы. Они не могут рассматриваться как константы их типа.

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

Конструктор может быть overload, но не virtual или friend.

Если класс имеет базовый класс с конструктором, то конструктор для базового класса вызывается до вызова конструктора для производного класса.

Конструкторы для объектов членов, если таковые есть, выполняются после конструктора базового класса и до конструктора объекта, содержащего их.

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

Преобразования

Конструктор, получающий один параметр, определяет преобразование из типа своего параметра в тип своего класса. Такие преобразования неявно применяются дополнительно к обычным арифметическим преобразованиям.

Поэтому присваивание объекту из класса X допустимо, если или присваиваемое значение является X, или если X имеет конструктор, который получает присваиваемое значение как свой единственный параметр.



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

Например:

class X { ... X (int); }; f (X arg)

X a = 1;

/* a = X (1) */ a = 2;

/* a = X (2) */

f (3);

/* f (X (3)) */

Если для класса X не найден ни один конструктор, принимающий присваиваемый тип, то не делается никаких попыток отыскать конструктор для преобразования присваиваемого типа в тип, который мог бы быть приемлем для конструкторов класса X.

Например:

class X { ... X (int); };

class X { ... Y (X); }; Y a = 1;

/* недопустимо: Y (X (1)) не пробуется */

Деструкторы

Функция член класса cl с именем ~cl называется деструктором. Деструктор не возвращает никакого значения и не получает никаких параметров; он используется для уничтожения значений типа cl непосредственно перед уничтожением содержащего их объекта.

Деструктор не может быть overload, virtual или friend.

Деструктор для базового класса выполняется после деструктора производного от него класса. Как деструкторы используются для управления свободной памятью.

Видимость имен членов

Члены класса, описанные с ключевым словом class, являются закрытыми, это значит, что их имена могут использоваться только функциями членами и друзьями, пока они



не появятся после метки public:. В этом случае они являются общими.

Общий член может использоваться любой функцией. Структура является классом, все члены которого общие.

Если перед именем базового класса в описании производного класса стоит ключевое слово public, то общие члены базового класса являются общими для производного класса; если нет, то они являются закрытыми.

Общий чен mem закрытого базового класса base может быть описан как общий для производного класса с помощью описания вида:

typedef-имя . идентификатор; в котором typedef-имя означает базовый класс, а идентификатор есть имя члена базового класса. Такое описание может появляться в общей части производного класса.

Рассмотрим:

class base

int a; public: int b,c; int bf (); };

class derived : base

int d; public: base.c; int e; int df (); };

int ef (derived&);

Внешняя функция ef может использовать только имена c, e и df. Являясь членом derived, функция df может использовать имена b, c, bf, d, e и df, но не a. Являясь членом base, функция bf может использовать члены a, b, c и bf.



1 ... 41 42 43 [ 44 ] 45 46 47 ... 210

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика