- •Отношения между классами и объектами.
- •Вариант 10
- •5.Как организовать использование указателя на базовый класс для доступа к методам (не виртуальным) производного класса ? в каком случае деструкторы объявляются виртуальными?
- •Int itsAge; // возраст
- •Virtual void Speak() const
- •2.Множественное наследование – понятие, синтаксис объявления производного класса.
- •6.Понятие и назначение чистых виртуальных функций и абстрактных классов.
- •1.Отношение между классами и объектами ассоциация: понятие, пример использования.
- •2.Отношения между классами: агрегация и композиция: понятие, пример использования.
- •3.Отношения между классами зависимость: понятие, пример использования.
- •Class Controller
- •Class Controller
Министерство образования и науки Российской федерации
Федеральное агентство по образованию
Государственное образовательное учреждение высшего профессионального образования «Алтайский государственный технический университет им. И. И.Ползунова»
Факультет информационных технологий.
Кафедра систем автоматизированного проектирования
Отчет защищен с оценкой ________________
Преподаватель __________________________
(подпись)
«__________» ____________________ 2011 г.
Отчет
по лабораторной работе № 2
Отношения между классами и объектами.
(название лабораторной работы)
по дисциплине «Программирование»
Студент группы ИВТ-12 В.А. Меркулов 10 ВАРИАНТ
(И. О., Фамилия) Вариант
Преподаватель доцент Л. Ю. Качесова
Барнаул 2012
Вариант 10
Задание 1
Базовый класс «АВИА-РЕЙСЫ» описывает следующие данные-элементы: номер рейса; пункт назначения; цена билета; время отправления; время прибытия на конечный пункт. В класс входят следующие функции: виртуальная функция просмотра информации об авua - рейсах; функция-друг для вывода информации о рейсах, отправляющихся в указанный пункт назначения по указанной цене билета. Производный класс «АВИА-РЕЙСЫ ПО СТРАНЕ» содержит следующие данные: дни вылета; переопределенную функцию просмотра данных о внутренних авua-рейсах. Производный класс «МЕЖДУНАРОДНЫЕ АВИА-РЕЙСЫ» содержит: страна, дата отправления и дата прибытия, переопределенную функцию просмотра данных о международных авua-рейсах.
Алгоритм
Текст программы
#include <iostream>
#include <conio.h>
using namespace std;
//bazovii class AviaR
class AviaR
{
friend void function(AviaR p[], int zB,char pN[])
{
if (zB==p->zena)
{
if (strcmp(p->punctNz,pN)==0)
{
p->Display();
cout<<"\n";
}
}
}
protected:
int num; //nomer reysa
char punctNz[25]; //punkt naznachenia
int zena; //zena bileta
char vremOtpr[15];//vrema otpravlenia
char vremPrb[10]; //vrema pribitia
public:
AviaR();
virtual ~ AviaR(){}
virtual void Display();//vivod dannih
};
AviaR::AviaR()
{ //
cout<<"\n Введите номер рейса: ";cin>>num;
cout<<"\n Введите пункт назначения: "; cin>>punctNz;
cout<<"\n введите цену билета: "; cin>>zena;
cout<<"\n введите время отправления: "; cin>>vremOtpr;
cout<<"\n введите время прибытия: "; cin>>vremPrb;
}
void AviaR::Display()
{
cout << "\n номер рейса:" << num;
cout << "\n пункт назначения:" << punctNz;
cout << "\n цена билета:" << zena;
cout << "\n время отправления:"<< vremOtpr;
cout << "\n время прибытия:" << vremPrb;
}
//proizv class AviaR_1 po strane
class AviaR_1 : public AviaR
{
protected:
char dv[10]; //dni vileta
public:
AviaR_1();
virtual ~ AviaR_1(){}
virtual void Display(); //vivod dannih
};
AviaR_1::AviaR_1()
{
cout << "\n Дни вылета:"; cin >> dv;
}
void AviaR_1::Display()
{cout << "\n АВИА-РЕЙСЫ ПО СТРАНЕ: ";
cout << "\n Дни вылета: " << dv << " ";
cout << "\n номер рейса:" << num;
cout << "\n пункт назначения:" << punctNz;
cout << "\n цена билета:" << zena;
cout << "\n время отправления:"<< vremOtpr;
cout << "\n время прибытия:" << vremPrb;
}
// proizv class AviaR_2 mezgorod
class AviaR_2 : public AviaR
{ protected:
char strana [25];
char datotpr[10];
char datprib[10];
public:
AviaR_2();
virtual ~ AviaR_2(){}
virtual void Display();
};
AviaR_2::AviaR_2()
{
cout << "\n страна:"; cin>> strana;
cout << "\n дата отправления: "; cin>> datotpr ;
cout << "\n дата прибытия: "; cin>> datprib ;
}
void AviaR_2::Display()
{ cout << "\n МЕЖДУНАРОДНЫЕ АВИА-РЕЙСЫ: ";
cout << "\n страна: "<< strana << " ";
cout << "\n дата отправления: " << datotpr << " ";
cout << "\n дата прибытия: " << datprib << " ";
cout << "\n номер рейса:" << num;
cout << "\n пункт назначения:" << punctNz;
cout << "\n цена билета:" << zena;
cout << "\n время отправления:"<< vremOtpr;
cout << "\n время прибытия:" << vremPrb;
}
int main()
{ setlocale(0,"Rus");
int zb; char pN[25];
int nMenu, flag = 1, kol;
int i = 0;
AviaR* p[100];
cout <<"\n Количество рейсов: ";cin >> kol;
while(i < kol && flag)
{
cout<<"\n Новая запись. Введите: "<< endl;
cout<<"1-Авиа-рейс по стране 2-Международный авиа-рейс 3-выход\n";
cin >> nMenu;
switch (nMenu)
{ case 1 : p[i++] = new AviaR_1(); break;
case 2 : p[i++] = new AviaR_2(); break;
default : flag = 0; break;
}
}
for (int id = 0; id < kol; id++)
{ p[id]->Display();
}
cout<<"\n\n Введите цену билета:"; cin>>zb;
cout<<"\n\n Введите пункт назначения:"; cin>>pN;
for (int id = 0; id < kol; id++)
{
function(p[id],zb,pN);
}
getch();
}
Тесты:
Задание 2
Класс «ЛЕКАРСТВО» содержит закрытые поля: название лекарства, цена, показания к применению, противопоказания и метод вывода сведений о лекарстве. Класс «АПТЕКА» содержит закрытые поля: название аптеки, номер аптеки, массив объектов класса «ЛЕКАРСТВО», метод поступления новых лекарств в аптеку, метод поиска лекарства по названию и метод вывода списка лекарств аптеки.
Алгоритм
Текст программы
#include <iostream>
#include <conio.h>
#include <string>
#include <stdio.h>
using namespace std;
// objavlenie classa
class Medican
{
private:
double zena;
string pok;
string prpok;
public:
char nazv[20];
Medican();
void Display();
};
class Apteka
{
private:
char name[20];
int num;
public:
Medican *p[20];
int n;
Apteka();
void Poisk(char[]);
void Display();
void NewMed();
};
Apteka::Apteka()
{
cout<<"\n vvedite nazvanie apteki: ";cin>>name;
cout<<"\n vvedite nomer apteki: ";cin>>num;
cout<<"\n vvedite kol-vo lekarstv: ";cin>>n;
for (int i=0;i<n;i++)
p[i]=new Medican();
}
void Apteka::NewMed()
{
p[n++]=new Medican();
}
void Apteka::Poisk(char *Nazv)
{
for (int i=0;i<n;i++)
if(strcmp(p[i]->nazv,Nazv)==0)
{
cout<<"\n\n nazvanie apteki: "<<name;
cout<<"\n nomer apteki: "<<num;
p[i]->Display();
}
}
void Apteka::Display()
{
cout<<"\n\n NAZVANIE APTEKI: "<<name;
cout<<"\n NOMER APTEKI: "<<num;
for (int i=0;i<n;i++)
p[i]->Display();
}
Medican::Medican()
{
cout<<"\n vvedite nazvanie lekarstva: "; cin>>nazv;
cout<<"\n vvedite zenu: "; cin>>zena;
cout<<"\n vvedite pokazania k primeneniu: "; cin>>pok;
cout<<"\n vvedite protivopokazania k primeneniu: "; cin>>prpok;
}
void Medican::Display()
{
cout<<"\n\n nazvanie lekarstva: "<<nazv;
cout<<"\n zena: "<<zena<<" RUR";
cout<<"\n pokazania k primeneniu: "<<pok;
cout<<"\n protivopokazania k primeneniu: "<<prpok;
}
int main()
{
int n,Menu,flag=1,NUMER;
Apteka *q;
char Nazv[20];
cout<<"\n kol-vo aptek:";cin>>n;
q=new Apteka [n];
while(flag)
{
cout<<"\n\n Nazmite:\n 1-Prosmotret' dannie 2-Poisk lekarstva 3-Dobavit' lekarstvo 4-Vihod \n";
cin >> Menu;
switch (Menu)
{
case 1 :for (int i=0;i<n;i++)
q[i].Display(); break;
case 2 : {cout<<"\n\n poisk: \n";
cout<<"\n vvedite nazvanie lekarstva:";cin>>Nazv;
for (int i=0;i<n;i++)
q[i].Poisk(Nazv); break;}
case 3: {cout<<"\n vvedite nomer apteki, v kot. hotite dobavit' lekarstva:";cin >>NUMER;
q[NUMER-1].NewMed();break;}
default : flag=0; break;
}
}
getch();
}
Тесты:
Вопросы (часть 1)