- •1. Объектно-ориентированное программирование как методология проектирования программных средств.
- •1.2. Объект
- •Iarray a(10), b(25), c(45);
- •Int main(void)
- •2.1. Перегрузка имен функций
- •Int print(int);
- •Void print(int);
- •Int (*matrix)[10];
- •Void main(void)
- •Void incr(int &aa)
- •3.2 Объявление класса.
- •Имя_класса имя объекта;
- •Имя объекта. Имя элемента
- •Имя_объекта. Имя_метода( );
- •Имя класса *this;
- •Имя_класса (список формальных параметров)
- •Листинг 3.4
- •V_3d( double &X, double &y,double &z)
- •Void main(void)
- •Х:: х(const х&)
- •V_3d::v_3d(const v_3d& v1)
- •Void v_3d::print()
- •Сlass X
- •Void main (void)
- •4. Перегрузка операций
- •V_3d(double x1,double y1,double z1)
- •Void print();
- •Void main(void)
- •Void v_3d::print()
- •4.3.1. Использование дружественных функций при перегрузке операций
- •Void print();
- •Void main(void)
- •Void v_3d::print()
- •4.3.2.Особенности использования дружественных функций
- •Имя объекта. Имя_функции
- •Void f1( X& );
- •Void f2 ( X* );
- •Void main(void)
- •5. Производные классы
- •Int Bfunc( );
- •Int Xfunc( );
- •Int Efunc( X & x1 );
- •Istream
- •Iostream
- •Ifstream
- •С помощью манипуляторов – специальных операций, вставляемых непосредственно в поток вывода.
- •Int width( int w);
- •Int precision( int p);
- •Void main(void)
- •Void open(char* filename, int mode, int access);
- •If(!fout) {
- •7. Виртуальные функции
- •Circle a;
- •A.Build();
- •Virtual double a(double X)
- •Void main (void)
- •Void Graphics Object :: Build() { };
- •8.Шаблоны функций и классов
- •Void main(void)
- •Void Swap ( SwapType &X, SwapType &y)
- •Void main(void)
- •Int a, double b;
- •Int sloc,rloc;//начало и конец очереди
- •Void qput(t I); // помещение элемента в очередь
- •Int main(void)
- •1.Какой принцип ооп реализуется с помощью шаблонных функций и классов?
- •2.Когда целесообразно использовать шаблоны функций? Каков общий вид объявления шаблона функции?
V_3d::v_3d(const v_3d& v1)
{
x=V1.x;
y=V1.y;
z=V1.z;
}
// определение метода класса для вывода координат вектора
Void v_3d::print()
{
cout << "x= " << x << " y= " << y << " z= " << z <<"\n";
}
Эта программа выводит на экран следующие данные:
координаты вектора B:
x= 0 y= 0 z= 0
координаты вектора R:
x= 1 y= 2 z= 3
длина вектора R = 3.741657
координаты вектора C:
x= 1 y= 2 z= 3
3.9. Инициализация объектов класса
Существуют два способа инициализации данных объекта с помощью конструкторов:
передача значений параметров в тело конструктора. Он продемонстрирован в программе из листинга 3.5.
применение списка инициализаторов данных объекта. Этот список помещается между списком параметров и телом конструктора:
имя_класса (список_параметров):
список_инициализаторов_элементов_данных
{ тело конструктора };
Каждый инициализатор списка относится к элементу и имеет вид:
имя_элемента_данных (выражение)
Например:
class V_3d
{
double x,y,z;
public:
V_3d ( double x1, double y1, double z1) : x (x 1),y (y1+x1),z (z1) { };
};
Инициализация V_3d A(2.2, 3.0, 6.2) присваиваете элементам объекта А следующие значения: A.x=2.2, A.y=5.2, A.z=6.2.
Этот способ предпочтительнее при использовании механизма наследования классов.
3.10. Деструкторы.
Деструктор- это функция уничтожения объекта данного класса. Деструктор представляет метод с именем, совпадающим с именем класса, перед которым стоит символ ~(тильда). Это универсальный символ, обозначающий “не” (“не конструктор”). Например:
Сlass X
{
public:
~ X(); // деструктор класса Х
};
Деструктор не должен иметь параметров, и, как и конструктор - типа возврата.
Класс может иметь только один деструктор или не иметь вообще. Если деструктор не объявлен для класса явно, компилятор генерирует его автоматически.
Вызов деструктора выполняется неявно, когда объект выходит из своей объявленной сферы действия.
Примечание.
Когда указатели объектов выходят за предел сферы действия, неявный вызов деструктора не происходит. Для уничтожения таких указателей должна быть явно задана операция delete. Например:
class Massiv {
int maxitems ; // Максимальное количество элементов массива
int citems ; // число элементов, размещенных в массиве
int *items ; // Указатель на массив
public:
//Конструктор
Massiv( int nitems)
{
maxitems = nitems;
items = new int [ nitems ];
citems = 0 ;
}
//Деструктор
~ Massiv( )
{
delete items ;};
};
Void main (void)
{
..............
Massiv *p = new Massiv (100) ;
delete p ;
..............
}
В этом примере память для объекта была распределена динамически с помощью операции new. В теле деструктора один оператор, освобождающий память, выделенную под размещение массива типа int при создании объекта класса Massiv.
В операции delete p присутствует неявный вызов деструктора. Перед разрушением объекта происходит освобождение памяти, используемой объектом, т. е. сначала освобождается память, которую адресует items, а затем удаляется объект, на который ссылается p.
Если этого не сделать, то после выхода указателя на объект за пределы сферы действия, имя указателя станет неизвестным, в связи с чем память, занятая объектом, не будет освобождена и ее нельзя будет использовать в программе.
Контрольные вопросы
1.Что такое класс? Как выполнить объявление класса. 2. Каким образом элементы класса получают атрибуты доступа?
3.Что такое объект класса и как выполнить объявление объекта класса в программе?
4. Что такое методы класса? Каковы особенности объявления и определения методов класса? Что такое указатель this? Как выполняется вызов функции – метода класса?
5. Какие функции называются конструкторами? Каков механизм передачи параметров конструктору?
6.Как выполняется инициализация объектов класса?
7.Каким образом осуществляется уничтожение объектов класса?
