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

Виртуальные функции.

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

Рассмотрим пример с использованием виртуальной функции:

Пример 9:

#include <iostream>

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

#include <conio.h>

using namespace std;

class MArray

{

protected:

int size;

int A[50];

public:

inline int takeA(int n)// Функция возврата A[n] элемента массива

{

return A[n];

};

inline int takeA(int n,int m)//Функция возврата A[n+m] элемента массива

{

return A[n+m];

};

};

class nasl:public MArray

{

public:

void Keyboard()

{

int i;

cout<<"Vvedite razmer massiva";

cin>>size;

for(i=0;i<size;i++)

{

cin>>A[i];

}

};

virtual void function()=0;

void DisplayA()// функция вывода массива на экран

{

int i;

for(i=0;i<size;i++)

{

cout<<" "<<A[i];

}

};

};

nasl a;

int main()

{

int i,k,m;

a.Keyboard();

a.DisplayA();

cout<<"Vvedite nomer elementa\n";

cin>>k;

i=a.takeA(k);

cout<<"A["<<k<<"]="<<" "<<i;

cout<<"Vvedite m & k\n";

cin>>k>>m;

i=a.takeA(k,m);

cout<<"A["<<k+m<<"]="<<" "<<i;

return 0;

}

 

Сейчас речь пойдет о инициализации и очистки полей объектов.

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

Конструктор — это метод класса, выполняющийсяавтоматически с момент создания объекта. Вручную конструктор вызывать не нужно. Эта функция класса отличается от всех остальных функций тем, что она называется так же как и сам класс для которого она определенна. Так имея класс Phonebook, имя нашего конструктора будет выглядеть следующим образом:

Phonebook();

Конструкторы могут относиться к private, protected, public частям класса. Также они могут быть определены как внутри, так и вне объявления класса.

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

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

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

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

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