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

П. 5.5. Реализация методов класса

Хотя функции доступа SetKey() и GetKey() объявлены (строки 7и 8) в Car, они еще не определены. SetKey() и GetKey() обеспечивает открытый интерфейс к закрытым переменным-членам класса. Для каждой функции доступа, наряду с другими методами, объявленными в классе, должна существовать реализация. Реализация – это описание действия функции. Для определения функции-члена необходимо связать имя класса, частью которого является функция-член, с именем функции. Это достигается путем написания имени функции вслед за именем класса с двумя двоеточиями. Два двоеточия называются оператором расширением области видимости.

Итак, реализация (определение) функции имеет следующий формат:

типВозвращаемогоЗначения имяКласса: : имяФункции (списокПараметров)

{

// тело функции

}

Для рассматриваемого примера реализация функций-членов SetKey() и GetKey() имеет вид:

void Car :: SetKey (unsigned short Num)

{

// закрытой переменной-члену присваивается значение,

// передаваемое извне через параметр Num

Key = Num;

}

unsigned short Car:: GetKey( )

{

// возвращение значения закрытой

// переменной Key

return Key;

}

Окончательно имеем:

#include <iostream>

using namespace std;

class Car

{

private:

unsigned short Key;

public:

void SetKey (unsigned short Num);

unsigned short GetKey( );

};

void Car :: SetKey (unsigned short Num)

{

Key = Num;

}

unsigned short Car:: GetKey( )

{

return Key;

}

int main ()

{

Car myZaparozec;

unsigned short Pass;

myZaparozec.SetKey (65000);

Pass =myZaparozec.GetKey ( );

cout<<"The key of my automobile is "<<Pass<<endl;

return 0;

}

Результат:

The key of my automobile is 65000

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Рассмотрим небольшой пример класса с конструктором.

#include <iostream>

using namespace std;

class myclass

{

int a;

public:

myclass ( ); // объявление конструктора

void Show ( );

};

// реализация (определение)конструктора

myclass:: myclass( )

{

cout << "In designer \n";

a = 10;

}

// реализация метода

void myclass:: Show ( )

{

cout << a<<"\n";

}

int main ()

{

myclass object; // объявление объекта

object. Show( );

return 0;

}

В этом примере значение a инициализируется конструктором myclass. Конструктор вызывается тогда, когда создается объект object. Объект, в свою очередь, создается при выполнении инструкции объявления объекта, что влечет за собой выполнение записанных в конструкторе действий.