Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VC++(теория).doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
375.3 Кб
Скачать

Конструкторы и деструкторы

  • Конструктор (constructor) - метод класса, использующийся для инициализации переменных класса или для выделения памяти. Всегда имеет такое же имя, как и класс, в котором они определены. Выполняется автоматически при создании объекта типа class (оператор new или при объявлении переменной данного класса). Могут иметь аргументы и их можно перегружать.

  • Деструктор (destructor) - метод класса, использующийся обычно для освобождения выделенной памяти, т.е. для освобождения захваченных ресурсов. Имеет то же имя, что и имя класса, но ему предшествует тильда (~). Вызываются автоматически при использовании delete по отношению к указателю класса или если программа выходит из области действия объекта класса. Деструкторы не имеют параметров и их нельзя перегружать.

  • Использование простых конструкторов приведено в (\29CSTR).

#include <iostream>

#include <string.h>

using namespace std;

class cstring { // Класс для работы с динамическими строками

char *psz; // Указатель на строку

public:

cstring() // Конструктор по умолчанию (без аргументов)

{ psz = 0; // Инициализирует строку значением "default"

setstring("default"); }

cstring(char* s) // Второй конструктор, инициализирующий строку

{ psz = 0; // значением передаваемого параметра

setstring(s); }

~cstring() // Деструктор, уничтожающий динамический объект

{ if (psz) // Если память выделена – освободить ее

delete psz; }

char* getstring() // Функция класса, возвращающая указатель на строку

{ return(psz); }

void setstring(char* ); // Функция класса, задающая новую строку

};

void cstring::setstring(char* s) // Функция класса, задающая новую строку

{ // (перераспределяет память)

if (psz != 0) // Если указатель не пустой

delete psz; // уничтожить динамическую строку

int str_len = strlen(s) + 1; // Вычислить длину буфера под строку

psz = new char[str_len]; // Динамически выделить память под буфер

strcpy(psz, s); // Скопировать параметр в буфер

}

int main()

{

cstring s0; // Создание объекта (конструктор по умолчанию)

cstring s1("first string"); // Создание объекта (второй конструктор)

// Динамическое создание объектов класса

cstring* ps2 = new string; // Конструктор по умолчанию

cstring* ps3 = new string("third string"); // Второй конструктор

// Вывод всех созданных строк на экран

cout << "s0 : " << s0.getstring() << endl;

cout << "s1 : " << s1.getstring() << endl;

cout << "ps2: " << ps2->getstring() << endl;

cout << "ps3: " << ps3->getstring() << endl << endl;

// Изменение значения строки объекта s0 и вывод нового значения

s0.setstring("Zero String");

cout << "s0 : " << s0.getstring() << endl;

return(0);

}

Перегрузка методов класса

  • Перегрузка функций означает, что в текущей области действия заданы несколько функций с одним и тем же именем, и компилятор выбирает нужную, учитывая тип и число аргументов, переданных при ее вызове (\30ABSOL)

class absolute_value {

public:

int number(int test_data) // Функция работы с целыми числами

{ return (abs(test_data)); }

double number(double test_data) // Функция работы с вещественными числами

{ return (fabs(test_data)); }

};

int main()

{

absolute_value neg_val;

cout << "The absolute value is : " << neg_val.number(-583) << endl;

cout << "The absolute value is : " << neg_val.number(-583.175) << endl;

return(0);

}

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