Билет 26. Объектно-ориентированное программирование. Классы и объекты. Компоненты классов

Использование классов — основное отличие оо-программирования от структурного.

Класс — это производный структурный тип, введённый в программировании на основе уже существующих типов.

Объект — конкретные переменные типа.

ключ_класса имя_класса

{

список_компонентов;

};

ключ_класса — одно из служебных слов:

- class

- struct

- union

Определение класса заканчивается ;

Принадлежащие классу функции называют методами класса или компонентными функциями. Данные класса называют компонентными данными, полями данных или элементами данных класса.

Struct complex

{

double real;

}

Класс: все компоненты по-умолчанию закрыты.

Структура: все компоненты по-умолчанию открыты.

Билет 27. Инкапсуляция. Режимы доступа к элементам класса

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

- private(использование только функции данного класса)

- public

- protected

Private – устанавливается по-умолчанию для служебного слова class.

Public - -//- слова struct.

Protected – используются лишь при создании иерархии классов.

Union – использование в качестве ключа_класса приводит к экономии пространства в памяти и ещё некоторым интересным аспектам. Общедоступно, но изменяемо спецификаторами.

Инкапсуляция — скрытие данных внутри объекта.

:: - операция принадлежности, при объявлении своих прототипов.

Обращение к элементам объекта:

void drob::vvod(void)

{…}

drob y;

y.vvod();

Билет. Понятие наследования. Объявление классов при наследовании

Функция потомка перекрывает одноимённую функцию своего предка.

Формат объявления функции потомка:

class имя_потомка:

режим_доступа имя_предка

{

новые_элементы;

};

Для того, что бы элементы данных класса предка были доступны функциям класса потомка, этим элементам должен быть поставлен в соответствии режим доступа — protected.

Class имя_потомка::режим_доступа имя_потомка

{…};

Билет. Конструкторы и деструкторы. Их имена и объявления

Конструктор создан для инициализации компонентных данных и выделение динамической памяти под данные.

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

Int, double,float...

Выделение и освобождение памяти происходит системой автоматически.

Конструктор и диструктор объявляются, как члены функции класса. Имя конструктора совпадает с именем класса, а имя диструктора начинается с ~имя_класса

Пример:

class str_oper

{char *string;

int string_len;

public:

str_oper(char *)//конструктор

{string=new char[string_len];}

~str_oper() //диструктор

{delete string;}

}

В основной программе обращения к конс. Или дистр. Нет. Их выполнение происходит автоматически.

Билет. Полиморфизм и перегрузка

Возможность использования функции(или операции) с одним и тем же именем применительно к разным наборам аргументов и операторов. Реализация выполнена через перегрузку.

Перегрузка — это расширения действия стандартных функций. Внутри класса допускается существование нескольких функций с одинаковыми именами, но различных типов результатов и наборами формальных параметров.

Компилятор автоматически выбирает подходящий вариант.

Пример:

int absolute::modul(int x)

{ return(abs(x)); }

double absolute::modul(double x)

{ return(fabs(x)); }

Перегрузка операций

Полиморфизм реализуется не только через механизм перегрузки, но и через перегрузку операции. Включается специальная функция, которая определяет действия, выполняемые этой операцией. Формат определения такой функции:

тип_возвращаемого_значения

оператор знак_операции(спецификации_параметров_операции)

{ тело_функции_операции; }

Пример:

#include<iostream.h>

#include<conio.h>

class vector

{

int x,y,z;

public:

vector operator+(vector t);

vector operator=(vector t);

void int (int mx, int my, int mz);

void show(void);

};

//Перегрузка операций+

vector vector::operator+(vector t)

{

vector temp;

temp.x=x+t.x;

temp.y=y+t.y;

temp.z=z+t.z;

return temp;

}

//Перегрузка операции=

vector vector::operator=(vector t)

{

x=t.x;

y=t.y;

z=t.z;

return *this;

}

void vector::init(int mx, int my, int mz)

{ x=mx; y=my; z=mz; }

void vector::Show(void)

{ cout<<x<<”, ”<<y<<”, ”<<z<<”\n”; }

void main()

{vector a,b,c;

clrscr():

a.init(1,2,3);

b.init(10,10,10);

a.show();

b.show();

c=a+b;

c.show();

c=a+b+c;

c.show();

c=b=a;

c.show();

b.show();

getch();

}

Наши рекомендации