Arrey.getArrey(100);
Arrey.putArrey();
Arrey.del();
Arrey.putArrey();
Return 0;
}
Любую переменную можно инициализировать, то есть присвоить ей значения, для инициализации объектов класса существуют специальные функции — конструкторы. Имя конструктора совпадает с именем класса, при необходимости он может принимать параметры, но не может возвращать значения даже типа void. Для примера: Arrey(). Если пользователь не объявляет конструктор, то существует конструктор по умолчанию, который ничего не делает, но он есть. Соответственно существует функции уничтожающая объекты класса — деструктор, она очень похожа на конструктор по своим свойствам. Зачастую наличие конструктора (стандартного, который ничего не делает) необходимо по протоколу. Имя деструктора ~Arrey.
Домашняя работа написать предложенную программу, так что бы в ней были конструктор с 3-мя параметрами и деструктор.
Лекция № 6.Перегрузка функций-членов. Инициализация объектов. Перегрузка операторов. Операторы преобразований. Наследование.
Дополнительные возможности использования функций.
Дополнительные возможности позволяют:
§ Перегружать функции-члены:
§ Перегружать операторы.
§ Создавать функции для поддержания классов с динамическим выделением памяти для переменных.
Мы уже говорили о перегрузке функций на занятии посвящённом функциям.Функции-члены можно перегрузить точно так же.
#include<iostream.h>
Class Rect
{ public:
Rect(int width,int height);
~Rect() {}
Void DrawRect(int aWidth,int aHeight);
Void DrawRect();
private:
Int itsWedth;
Int itsHeight;
};
Rect::Rect(int wedth,int height)
{
itsWedth=wedth;
itsHeight=height;
}
void Rect::DrawRect()
{
DrawRect(itsWedth,itsHeight);
}
void Rect::DrawRect(int aWedth,int aHeight)
{
for(int i=0;i<aHeight;i++)
{
for(int j=0; j<aWedth;j++)
cout<<"*";
cout << "\n";
}
}
Int main(void)
{
Rect theRect(30,5);
cout <<"Печать того, что уже есть\n";
TheRect.DrawRect();
cout <<"Печать нового\n";
TheRect.DrawRect(40,10);
Return 0;
}
Таким же образом можно перегружать конструкторы.
В конструкторе можно инициализировать члены не в теле, а в момент инициализации самого конструктора, синтаксис выглядит следующим образом:
Rect::Rect(int wedth,int height):
ItsWedth(wedth),
ItsHeight(height) {}
Особенностью функции, которая имеет параметр по умолчанию является возможность ситуации: если параметр не указывается в скобках при вызове, то он имеет это значение. Значения параметров по умолчанию могут задаваться справа налево, пример: void DrawRect (int aWidth, bool Use = false, int aHeight);не может быть использован, так как самый правый параметр по умолчанию не имеет значения.
Выбор между перегруженными функциями и значениями по умолчанию с одной стороны является делом каждого программиста, но существуют общие принципы, когда перегрузка функции предпочтительнее:
§ Не существует стандартных общепринятых значений, которые можно было бы использовать по умолчанию;
§ В программе в зависимости от ситуации необходимо использовать разные алгоритмы;
§ Необходимо иметь возможность изменять тип значений, передаваемых в функцию.
Как уже говорилось, существует конструктор по умолчанию, который никак себя не проявляет, пользователь имеет возможность написать свой собственный конструктор по умолчанию ( по определению это конструктор не имеющий параметров). Это необходимо если в программе был создан свой конструктор, с этого момента компилятор перестаёт предлагать конструктор по умолчанию, даже в ситуации, когда необходим конструктор без параметров.
Конструктор может быть перегружен, как и любая другая функция, это необходимо для повышения гибкости программы. Например: можно в предыдущем примере создать конструктор, который при введении его без параметров будет использовать значения по умолчанию.
Функции — друзья.
Дружественная функция — это функция, которая не является методом класса, но имеет доступ к собственным и защищённым элементам класса. Функция не может быть другом без согласия класса, то есть она должна быть описана в теле класса с помощью специального слова friend.
Дружественная функция при вызове не получает указателя *this Объекты классов должны передаваться явно через аппарат параметров. При её вызове нельзя использовать аппарат вызова метода класса. Использование дружественных функций позволяет упростить интерфейс между классами. Можно сделать все функции класса Y друзьями класса X:
Class Y
{
void f1(X&);
void f2(X*);
};
Class X
{
Friend Y;
Int I;
Void f3();
}
Дата добавления: 2015-12-26; просмотров: 539;