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

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

Переменные-члены класса не могут получить начальные значения в определении класса, но, как и обычные переменные должны быть инициализированы. Для этой цели и служит конструктор.

Для конструктора всегда выполняются следующие правила:

  • конструктор никогда не вызывается явно, а по своему назначению используется в основном для инициализации полей данных при создании объекта;

  • конструктор автоматически вызывается при создании объекта класса;

  • имя конструктора совпадает с именем класса;

  • от других собственных функций класса конструктор отличается тем, что не имеет возвращаемого значения (даже типа void) – результатом выполнения конструктора является объект;

  • конструктор может иметь параметры, а, следовательно, в классе можно определить несколько конструкторов;

  • конструктор объекта можно не объявлять, компилятор сам снабдит такой объект стандартными конструктором (и деструктором), стандартный конструктор не принимает аргументов и (вместе со стандартным деструктором) ничего не делает.

  • важно помнить, что при наличии конструктора, созданного программистом, компилятор не будет создавать свой, но если созданный конструктор получает в виде параметра какое-либо значение, а при инициализации объекта оно не передается, то произойдет ошибка компиляции.

Объявив конструктор необходимо объявить и деструктор. Деструкторы удаляют из памяти отработавшие объекты и освобождают выделенную для них память. Правила деструктора:

  • деструктору присваивается имя класса с символом тильды «~» впереди;

  • деструкторы не имеет параметров (не принимают аргументов) и не возвращают значений;

  • должен быть открытым (public) методом;

  • никогда не вызывается явно, вызывается автоматически для каждого объекта при выходе из области видимости объекта;

  • если деструктор не определен в классе явно, то он создается компилятором автоматически, по умолчанию освобождая память, занимаемую объектом.

#include <iostream>

class Car

{

public:

Car(unsigned int initialYear);

~Car();

unsigned int GetYear( );

void SetYear (unsigned int Year);

void Start( );

private:

unsigned int itsYear;

};

using namespace std;

Car::Car(unsigned int initialYear)

{

itsYear=initialYear;

}

Car::~Car ( ) { }

int unsigned Car::GetYear ( )

{

return itsYear;

}

void Car::SetYear (unsigned int Year)

{

itsYear=Year;

}

void Car::Start ()

{

cout<<"Forward!!!\n";

}

int main( )

{

unsigned int Old;

Car myZaparozec(19);

Old=myZaparozec.GetYear ( );

cout<<"The year back to my machine was "<<Old<<" years"<<endl;

myZaparozec.SetYear (20);

Old=myZaparozec.GetYear ( );

cout<<"Now to my machine "<<Old<<" years"<<endl;

myZaparozec.Start ();

return 0;

}

1 С++ не имеет встроенных средств ввода/вывода подобно другим языкам. Даже простейший исходный текст программы располагается в нескольких файлах: например, файл iostream является заголовочным файлом, в котором на языке С++ содержится описание стандартных средств ввода/вывода, в частности консольных потоков cin и cout. Эти потоки в терминах С++ являются объектами классов.

2 Символ << называют так же операцией помещения в поток.

3

4 В прототипе функции имена параметров не обязательны и имеет право существовать следующий вариант объявления: long myFunc (int = 21);