{ //класса ved, множественное наследование
private: //закрытые элементы класса
float stoim; //стоимость работы
float itog; //итоговая стоимость всех работ рабочего
public: //открытые элементы класса
ved(char* im1,char* im2):akt(im1),cena(im2)//конструктор
{
stoim=itog=0;
} //прототипы элементов-функций:
void sozdanie(); //расчет и вывод документов
private:
void formecran(char*);//вывод формы документа
};
#endif
//файл кодов vedom.cpp (с заглушками)
#include "vedom.hpp"
//функция sozdanie
void ved::sozdanie()
{ zaglushka("Вызвана функция ved::sozdanie"); }
//файл управления upr.cpp
#include "vedom.hpp"
char imf_akt[13];
char imf_cena[13];
ved obj(imf_akt,imf_cena); //объявление объекта класса ved
//функция podmenu
void podmenu(int n,int x) //n - номер подменю, 0 - акт, 1 - сена
{ //x - номер колонки вывода подменю
char ch;
char *m[]={ " Ввод ",
" Поиск ",
" Замена ",
" Удаление ",
" Выход "
};
int pos[5];
_setcursortype(_NOCURSOR);
gotoxy(2,23);
clreol();
cputs("Выберите пункт меню и нажмите <Enter>");
for (int k=0;k<5;k++)
{
if (k==0)
textattr(0+(2<<4));
else
textattr(0+(7<<4));
gotoxy(x,3+k);
pos[k]=wherey();
cputs(m[k]);
}
k=0;
for (;;)
{
ch=getch();
if (ch==13) break;
if (ch==0)
{
ch=getch();
switch (ch)
{
case 80: if (k==4) continue;
gotoxy(x,pos[k]);
textattr(0+(7<<4));
cputs(m[k]);
k++;
gotoxy(x,pos[k]);
textattr(0+(2<<4));
cputs(m[k]);
textattr(15+(0<<4));
break;
case 72: if (k==0) continue;
gotoxy(x,pos[k]);
textattr(0+(7<<4));
cputs(m[k]);
k--;
gotoxy(x,pos[k]);
textattr(0+(2<<4));
cputs(m[k]);
textattr(15+(0<<4));
break;
}
}
}
textattr(15+(0<<4));
_setcursortype(_NORMALCURSOR);
switch (k)
{
case 0: if (n==0) obj.akt::sozdanie();
if (n==1) obj.cena::sozdanie();
break;
case 1:
case 2:
case 3: if (n==0) obj.akt::correct(k);
if (n==1) obj.cena::correct(k);
break;
case 4: break;
}
if (k!=4) podmenu(n,x);
return;
}
//функция menu
void menu()
{
char ch;
char *m[]={ " Акты работ ",
" Расценки работ ",
" Ведомость ",
" Выход "
};
int pos[4];
clrscr();
_setcursortype(_NOCURSOR);
gotoxy(2,23);
cputs("Выберите пункт меню с помощью (-> и <-) и нажмите <Enter>");
gotoxy(16,1);
for (int k=0;k<4;k++)
{
if (k==0)
textattr(0+(2<<4));
else
textattr(0+(7<<4));
pos[k]=wherex();
cputs(m[k]);
}
k=0;
for (;;)
{
ch=getch();
if (ch==13) break;
if (ch==0 && kbhit())
{
ch=getch();
switch (ch)
{
case 77: if (k==3) continue;
gotoxy(pos[k],1);
textattr(0+(7<<4));
cputs(m[k]);
k++;
gotoxy(pos[k],1);
textattr(0+(2<<4));
cputs(m[k]);
textattr(15+(0<<4));
break;
case 75: if (k==0) continue;
gotoxy(pos[k],1);
textattr(0+(7<<4));
cputs(m[k]);
k--;
gotoxy(pos[k],1);
textattr(0+(2<<4));
cputs(m[k]);
textattr(15+(0<<4));
break;
}
}
}
textattr(15+(0<<4));
_setcursortype(_NORMALCURSOR);
switch (k)
{
case 0: podmenu(k,pos[k]);
break;
case 1: podmenu(k,pos[k]);
break;
case 2: obj.sozdanie();
break;
case 3: break;
}
if (k!=3) menu();
return;
}
//функция main
main()
{
clrscr();
gotoxy(2,23);
cout<<"Введите имя файла Акты:";
cin>>imf_akt;
gotoxy(2,23);
clreol();
cout<<"Введите имя файла Расценки:";
cin>>imf_cena;
obj.akt::init();
obj.cena::init();
menu();
}
Лабораторная работа №6
Отладить и выполнить первую версию программы. Проконтро - лировать работу меню и всех подменю.
3.2. Программирование классов верхнего уровня.
Простое наследование и полиморфизм
Простым наследованием называется наследование, когда производный класс имеет непосредственно только один базовый класс.
Полиморфизм означает способность объекта изменять свои действия (операции,функции) в зависимости от типов данных.
Полиморфизм имеет следующие формы:
- специальный полиморфизм (перегрузка операций и функций);
- чистый полиморфизм (виртуальные функции);
- параметрический полиморфизм (шаблоны функций и классов).
Пример практического занятия №8
В нашем примере рассмотрим базовый класс index и производные классы akt и cena (простое наследование).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.