Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2463.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
386.56 Кб
Скачать

Int hours, minutes, seconds; // закрытые поля

};

// реализация вне класса

time::time(): hours(0), minutes(0), seconds(0)

{}

Конструктор инициализации обеспечивает объявление и инициализацию пере­менных:

time (12,59,59), s(13,45), u = 14;

Конструктор инициализации может вызываться явно:

time R = time(10): // явный вызов конструктора

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

time *a = new time; // конструктор без аргументов

time *b = new time(); // конструктор без аргументов

time *d = new time(12,23); // конструктор инициализации

time *f = new time(*d); // конструктор копирования

Конструкторы обеспечивают привычную форму объявления констант:

const time d2(100,67); // конструктор инициализации

const time d0 = 100; // конструктор инициализации

const time d5 = time(l00); // явный вызов

Конструктор инициализации обеспечивает инициализацию массива:

time Т[3] = { 1,2,3 };

Для каждого целого числа, представленного в списке, вызывается конструктор инициализации, поэтому инициализация массива представляет собой следующее:

time T[0]=time(l);

time T[l]=time(2);

time T[2]=time(3);

Если массив не инициализируется, то для каждого элемента массива вызывается конструктор без аргументов, если он определен явно или неявно (или вызывает­ся конструктор инициализации с аргументами по умолчанию).

Деструктор – это метод, имеющий имя класса, с тем отличием, что его первым символом должен быть символ ~ (тильда). Деструктор не возвращает результата и не имеет аргументов. Деструктор в классе может быть только один – перегруз­ка деструкторов запрещена. Деструктор вызывается автоматически при каждом уничтожении объекта. При отсутствии в классе явно определенного деструктора он создается автоматически. Вид автоматически создаваемого деструктора сле­дующий:

класс::~класс(){}

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

Конструкторы и параметры

Конструктор копирования вызывается неявным образом при передаче в функ­цию параметра-объекта по значению и при возврате значения из функции. При других способах передачи параметра конструктор копирования не вызывается.

class Money {

public:

// конструктор инициализации без аргументов

Money(const double &r = 0.0) : Summa(r) {}

friend bool operator==Cconst Money &a, const Money &b);

friend bool operator!=(const Money &a, const Money &b);

private:

double Summa;

};

// реализация дружественных функций

bool operator==(const Money &a, const Money &b) {

return (a.Summa == b.Summa);

}

bool operator!=(const Money &a, const Money &b) {

return !(a == b);

}

// использование

void fl(Money t); // по значению

void f2(Money *t); // no адресу

void f3(const Money &t); // no константной ссылке

void f4(Money &t); // по ссылке

Money d2(100.67); // инициализация

fl(d2); // по значению вызов конструктора копирования

f2(&d2); // по адресу конструкторы не вызываются

f3(d2); // по константной ссылке - не вызываются

f4(d2); // по ссылке - не вызываются

Конструктор копирования вызывается для создания скрытой «внутренней» копии объекта. При передаче в качестве параметра выражения может вызываться конструктор инициализации.

f1(120): // по значению - вызывается конструктор инициализации

f3(120); // по константной ссылке - вызывается конструктор инициализации

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

void f1(Моnеу t = 100);

void f3(const Money &t = 200);

void f2(Money *t = new Money);

void f2(Money *t = new Мопеу(300));

Вызов функций без аргумента во всех случаях сопровождается вызовом конструктора инициализации.

В описание класса добавляем конструкторы:

class P_number_class {

char number[200]; // число

unsigned int scale_of_notation; // система счисления

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