
- •Міністерство аграрної політики та продовольства україни рівненський державний аграрний коледж
- •Тема: оголошення та структура класів.
- •Зміст та послідовність виконання завдань
- •Тема: агрегування та композиція класів.
- •Зміст та послідовність виконання завдань
- •Тема: перевантаження операцій.
- •Зміст та послідовність виконання завдань
- •Тема: агрегування та композиція класів.
- •Зміст та послідовність виконання завдань
- •Тема: віртуальні функції, поліморфізм.
- •Зміст та послідовність виконання завдань
- •Тема: класи потокового введення-виведення та робота з файлами.
- •Зміст та послідовність виконання завдань
- •Тема: шаблонні класи.
- •Зміст та послідовність виконання завдань
- •Зміст та послідовність виконання завдань
- •Тема: опрацювання виняткових ситуацій.
- •Зміст та послідовність виконання завдань
- •Тема: динамічна ідентифікація та приведення типів.
- •Зміст та послідовність виконання завдань
- •Висновок
- •Список використаной літератури
Тема: агрегування та композиція класів.
Мета: поляга у вивченні механізму повторного використання коду на основі контейнерних класів.
Матеріально-технічне оснащення робочого місця: ПК, інструкційна картка.
Зміст та послідовність виконання завдань
1. Створити ієрархію класів ВЕКТОР та БЕЗПЕЧНИЙ ВЕКТОР з перевіркою виходу індексу за межі одновимірного масиву. Безпечний вектор визначає змінні:нижню і верхню межу (індекси). Перевизначити виведення у потік і введення з потоку, конструктор копіювання, операцію присвоювання через відповідні функції базового класу.
Програма:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <iostream>
#include<cstring>
using namespace std;
struct zarplata
{
char name [20];
int nomer;
int oplata;
int dni;
int prem;
};
int main ()
{
zarplata *m;
int i,n,j;
char *temp;
int e[1];
printf ("\n Vvedite kolichestvo chelovek :\n\n n=");
scanf ("%d",&n);
m=(zarplata*)malloc(n*sizeof(zarplata));
temp = (char*)malloc(20*sizeof(char));
for (i=0; i<n; i++)
{
cout<<" Premiya - "<<endl;
cin>>m[i].prem;
cout<<" nomer - "<<endl;
cin>>m[i].nomer;
cout<<" Oplata - "<<endl;
cin>>m[i].oplata;
cout<<" Dni - "<<endl;
cin>>m[i].dni;
cout<<" FIO - "<<endl;
cin>>m[i].name;
}
for (i=0; i<n-1; i++)
{
for(j=i; j<n; ++j)
if (strcmp(m[j].name,m[i].name)<0)
{
strcpy (temp,m[i].name);
strcpy (m[i].name,m[j].name);
strcpy (m[j].name,temp);
}
}
for(int i = 0;i<n;i++)
{
e[i]=m[i].oplata*8*m[i].dni+m[i].prem;
}
for (i=0; i<n; i++)
{
cout<<"FIO: "<<m[i].name<<" | Zarplata: "<<e[i]<<endl;
}
free (m);
free(temp);
getch ();
return 0;
}
Результат:
2. Створити ієрархію типів, що описує ПРОГРАМНЕ ЗАБЕЗПЕЧЕННЯ та
ОПЕРАЦІЙНУ СИСТЕМУ. Визначити клас WINDOWS ІЯТ як операційну
систему. Класи повинні містити необхідні дані, конструктори, деструктори,
методи, перевантажені функції виведення у потік і введення з потоку.
Програма:
#include <iostream.h>
#include <vector.h>
#include <string.h>
int main()
{
setlocale(LC_ALL, "");
vector<std::string> students;
string buffer = "";
cout << "Вводите ОС. "
<< "По окончание ввода введите пустую строку" << std::endl;
do {
std::getline(std::cin, buffer);
if (buffer.size() > 0) {
students.push_back(buffer);
}
} while (buffer != "");
unsigned int vector_size = students.size();
::cout << "Ваш вектор." << std::endl;
for (int i = 0; i < vector_size; i++) {
std::cout << students[i] << std::endl;
}
return 0;
}
Результат:
Тема: віртуальні функції, поліморфізм.
Мета: полягає у вивченні поліморфізму класів та механізму його реалізації за допомогою віртуальних функцій.
Матеріально-технічне оснащення робочого місця: ПК, інструкційна картка.
Зміст та послідовність виконання завдань
1. Створити абстрактний БАЗОВИЙ клас з віртуальною функцією - площа поверхні. Створити похідні класи: прямокутний ПАРАЛЕЛЕПІПЕД, ТЕТРАЕДР, КУЛЯ зі своїми функціями площі поверхні. Площа поверхні паралелепіпеда: S = 2(ab + bc + ca), дe a, b, c - ребра. Площа поверхні кулі:
S = 4кг2, де г - радіус. Площа поверхні тетраедра: S = a2-JÏ, де а- довжинаребра. Для перевірки пізнього зв’язування визначити масив вказівників на абстрактний клас, яким присвоюються адреси об’єктів неабстрактних класів. Використати вказівники для виклику віртуальної функції.
Програма:
#include <iostream.h>
#include <conio.h>
#define interface struct
interface IVolume {
virtual ~IVolume(){};
virtual double FindVol(double x, double y, double t) = 0;
};
class CParall : public IVolume{
public:
CParall(){ cout<<"CParall type obj create\n"; }
virtual ~CParall(){ cout<<"CParall type obj destroy\n"; }
virtual double FindVol(double x, double y, double t){ return x*y*t;}
};
//A yoii eeanna ia ae?o eiaeee, io iioi?ioea oae iieo?aaony.
class CPyramid : public IVolume {
public:
CPyramid() { cout<<"CPyramid type obj create\n"; }
virtual ~CPyramid() { cout<<"CPyramid type obj destroy\n"; }
virtual double FindVol(double x, double y, double t){ return x*y*t;}
};
class CSphere : public IVolume {
public:
CSphere() { cout<<"CSphere type obj create\n"<<'\n'; }
virtual ~CSphere() { cout<<"CSphere type obj destroy\n"; }
virtual double FindVol(double x, double y, double t){
y = 0;
t = 0;
return (4*3.14*x/3)/3;
}
};
int main(){
const int size = 3;
CParall *cp = new CParall ;
CPyramid *cpyr = new CPyramid ;
CSphere *cs = new CSphere ;
IVolume *i_ptr[size] = {cp,cpyr,cs};
cout<<i_ptr[0]->FindVol(2,3,4)<<'\n';
cout<<i_ptr[1]->FindVol(2,3,2)<<'\n';
cout<<i_ptr[2]->FindVol(5,0,0)<<'\n';
cout<<'\n';
for(int i =0;i<size;i++)delete i_ptr[i];
cout<<'\n';
getch();
}
Результат:
2. Створити абстрактний клас з віртуальним методом для обчислення характеристик одновимірного масиву цілих чисел. Визначити похідні класи, у яких реалізовано віртуальний метод для знаходження суми та добутку елементів масиву, найменший та найбільший елементи, кількість додатних, від’ємних та нульових елементів. Ввести масив з клавіатури та знайти його характеристики.
Програма:
# include <iostream.h>
# include <conio.h>
struct node
{
int info;
node *l, *r;
};
node * tree=NULL;
void push(int a,node **t)
{ if ((*t)==NULL)
{
(*t)=new node;
(*t)->info=a;
(*t)->l=(*t)->r=NULL;
return;
}
if (a>(*t)->info) push(a,&(*t)->r);
else push(a,&(*t)->l);
}
void print (node *t,int u)
{
if (t==NULL) return;
else
print(t->r,++u);
}
void main ()
{ int n;
int s;
cout<<"vvedite kilkist elementiv ";
cin>>n;
for (int i=0;i<n;++i)
{ cout<<"vvedite chislo ";
cin>>s;
push(s,&tree);
}
cout<<"vashe derevo \n";
print(tree,0);
getch();
}
Результат: