принадлежащий ему, то эта функция получает право доступа к внутренним элементам класса, например:
class type{
private:
int prm;
public:
friend void ftype(type x,int y);
void ftype(type x,int y);
{ x.prm=y;}
В данном примере в “дружественной “ классу функции ftype осуществляется доступ к внутренней переменной prm объекта x, принадлежащего к классу type.
2.2. Отношения между классами
Одной из важнейших черт ОПП является наличие механизма наследования свойств одного класса другими классами. Он позволяет строить новые классы на базе ранее созданных и этим самым способствует повторной используемости результатов процесса программирования.
Программа может включать в себя набор базовых классов, которые не связаны ни с какими другими. На основе базовых классов строятся производные классы, которые наследуют от базовых классов их структуры данных и методы. Таким образом, производные классы становятся расширением базовых, при этом они не включают в себя детали реализации базовых классов.
Рассмотрим пример, иллюстрирующий механизм взаимодействия между базовым и производными классами:
//bassear.h
class basearray
{protected:
int maxitems: //максимальное число элементов
int citems; //число размещенных элементов
public: //конструктор
basearray(int nitems){maxxitems=nitems; citems=0;};
};
//irray.h
class iarray : public basearray
{private:
int *items;
public:
iarray(int nitems); //конструктор
_iarrray(); //деструктор
int putitem(int item) //занесение элемента в массив
int getitem(int ind;int &item); // получение элемента из массива
int count({return citems;}); //получение числа элементов
};
Исходный текст методов класса iarray приведен ниже:
//iarray.cpp
#include “basearray.h”
#include “iarray.h”
iarray:iarray(int nitems):basearray(nitems) //конструктор
{items=new int[nitems];}
iarray::_iarray() //деструктор
{delete items;}
int iarray::putitem(int item) //занесение элемента в массив
{ if (citems<maxitems){
items[citems]=item;
citems++;
return 0;
}
else return –1;
}
int iarray:getitem(int ind,int &item) //получение элемента из массива
{ if(ind>=0 && ind<citems){
item=items[ind];
return 0;
}
else return –1;
}
int iarray::count(){return citems;}; //получение числа элементов
В новой версии реализации массива выделен базовый класс basearray, в котором определены общие для массивов составляющие, независимо от типов элементов. В производном классе определен конкретный тип массива. В нашем случае тип массива int, хотя можно определить тип массива как float, как struct и т.п.
Класс iarray наследует от класса basearray конструктор. При создании объекта типа iarray в конструкторе iarray вызывается конструктор basearray. С помощью механизма наследования осуществляется скрытие информации. Появившийся описатель protected говорит о том, что следующие за ним переменные будут доступны в производном и доступны в классах и функциях, не принадлежащим к этим классам.
2.3. Расширения языка С++
ФУНКЦИЯ inline
В функции #define проявляется много необычных эффектов связанных с многократным использованием аргументов. Все проблемы разрешила функция С++ inline, взятая из языка ADA. При обращение к функции с описателем inline не происходит реального вызова, а исполняется код функции, который транслятор вставляет непосредственно в место обращения.
Это значительно позволяет экономить время на вызове функции. Ограничение только на размер функции, она должна быть достаточно короткой, например:
Inline double sqr(double x){return x*x;}
Обычно функция помещается в header-файл- файл с расширением *.h, чтобы функция всегда была “под рукой” у транслятора. Другое ограничение, inline-функции не должны совершать циклы или ассемблерные вставки.
ФУНКЦИЯ OVERLOAD(ПЕРЕЗАГРУЖАЕМЫЕ)
Следующей функцией пришедшей из ADA является функция overload, позволяющая различить функции не только по имени, но и по типу аргумента, например:
double sqr(double x){return x*x;}
Обе спокойно уживаются в одной программе. При вызове будет использована одна из функций, какая решает тип аргумента.
ПАРАМЕТРЫ ФУНКЦИИ ПО УМОЛЧАНИЮ
Допустим, что вы имеете функцию для вывода матрицы в файл. Как правило, такие функции, для распечатки снабжаются большим количеством описаний, например:
print(matrix a,char *format=”%9.4”,char *title=null);
Задавать значение параметров лучше только один раз в разделе
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.