лабы первая часть оопип
.pdfМинистерство Образования Республики Беларусь Учреждение Образования
БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
Кафедра Экономической Информатики
Контрольная работа по дисциплине
«Объектно-ориентированное проектирование и программирование»
Выполнил:
студент группы 702322 Пашковский Н.В. (дистанционная форма обучения) Проверила:
Ковальчук А.М.
МИНСК 2009г.
Лабораторная работа №1 (наследование и виртуальные функции)
Реализовать абстрактный класс Shape, содержащий интерфейс иерархии.
Создать производные абстрактные классы TwoDShape и ThreeDShape, от которых унаследовать всевозможные конкретные формы (круг, прямоугольник, куб, цилиндр). Реализовать виртуальные функции print (для вывода типа и размера объектов каждого класса), area (вычисление площади), volume (вычисление объема).
Исходный текст:
#include "iostream.h" #include "iomanip.h" #include "string.h"
#define N 4
class Shape |
// БАЗОВЫЙ класс |
{public:
virtual void print(){ }; //интерфейс virtual double area(){ return 0;} virtual double volume(){ return 0;}
}; |
|
|
class TwoDShape: public Shape |
// БАЗОВЫЙ класс |
|
{ |
public: |
|
|
virtual void print(){} |
//интерфейс |
|
virtual double area(){ return 0;} |
|
}; |
|
|
class ThreeDShape: public Shape |
// БАЗОВЫЙ класс |
|
{ |
public: |
|
|
virtual void print(){} |
//интерфейс |
|
virtual double volume(){ return 0;} |
}; |
|
|
|
class rect : public TwoDShape |
|
// ПРОИЗВОДНЫЙ класс (прямоугольник) |
|
{ |
int h,s; |
//обявление переменной |
|
public: |
|
|
|
|
void print(){ |
|
|
|
cout<<"it's a rectangle. It's length is "<<h<<".It's width is "<<s<<endl;//вывод |
||
длины и ширины на экран |
|
|
|
|
} |
|
|
|
rect(int H,int S): h(H),s(S) {} |
//определение конструктора с параметрами |
|
|
double area(){ return h*s;} |
// вычисление полощади прямоугольника |
|
}; |
|
|
|
class cube : public ThreeDShape |
|
// ПРОИЗВОДНЫЙ класс (куб) |
|
{ |
int s; |
//обявление переменной |
|
public: |
|
|
|
|
void print(){ |
|
|
|
cout<<"it's a cube. It's side is "<<s<<endl;//вывод длины стороны на экран |
||
|
} |
|
|
|
cube(int S): s(S) {} |
|
//определение конструктора с параметрами |
|
double volume(){ return s*s*s;} |
// вычисление объема куба |
|
}; |
|
|
|
class cylinder : public ThreeDShape |
// ПРОИЗВОДНЫЙ класс (цилиндр) |
|||
{ |
int h,r; |
//обявление переменной |
||
|
public: |
|
|
|
|
void print(){ |
|
|
|
|
|
cout<<"it's a cylinder. It's height is "<<h<<"It's radius is "<<r<<endl; //вывод |
||
высота и радиуса на экран |
|
|
||
|
} |
|
|
|
|
cylinder(int H,int R): h(H),r(R) {} |
|
//определение конструктора с параметрами |
|
|
double volume(){ return 3.14*r*r*h;} |
// вычисление объема цилиндра |
||
}; |
|
|
|
|
class circle : public TwoDShape |
// ПРОИЗВОДНЫЙ класс (круг) |
|||
{ |
int r; |
//обявление переменной |
||
|
public: |
|
|
|
|
void print(){ |
|
|
|
|
|
cout<<"it's a circe. It's radius is "<<r<<endl; //вывод радиуса на экран |
||
|
} |
|
|
|
|
circle(int R): r(R){} |
//определение конструктора с параметрами |
||
|
double area(){ return 3.14*r*r;} |
// вычисление полощади круга |
||
}; |
|
|
|
|
int main() |
|
|
|
|
{ |
|
|
|
|
|
Shape *p[N],a; |
|
|
|
|
double volume,area; |
|
|
|
|
rect b(2,3); //создание экземпляра класса rect с параметрами 2 и 3 |
|||
|
circle c(4); //создание экземпляра класса circle с параметром 4 |
|||
|
cube d(5); |
//создание экземпляра класса cube с параметром 5 |
||
|
cylinder e(5,1); //создание экземпляра класса cylinder с параметрами 5 и 1 |
|||
|
p[0]=&b; |
//0-й элемент массива p получает значение адреса b |
||
|
p[1]=&c; |
//1-й элемент массива p получает значение адреса c |
||
|
p[2]=&d; |
//2-й элемент массива p получает значение адреса d |
||
|
p[3]=&e; |
//3-й элемент массива p получает значение адреса e |
||
|
p[4]=&c; |
//4-й элемент массива p получает значение адреса c |
for(int i=0;i<N;i++){ |
|
p[i]->print(); |
//вызов функции print() для каждого элемента массива указателей |
класса Shape |
|
area=p[i]->area(); |
//вычисление площади для каждого элемента массива указателей |
класса Shape |
|
volume=p[i]->volume(); //вычисление объема для каждого элемента массива указателей класса Shape
if(area==0)
cout<<"the figure has no area"<<endl;
else
cout<<"the area is "<<area<<endl; if(volume==0)
cout<<"the figure has no volume"<<endl;
else
cout<<"the volume is "<<volume<<endl;
}
return 0;
}
Рисунок 1 – Проверка работы программы
Лабораторная работа №2 (наследование)
Создать базовый класс “Книга” включающий название книги, фамилию автора. Получить производный класс “Отдел” включающий в себя название отдела.
Написать программу позволяющую добавлять и удалять книги из отдела.
Исходный текст: |
|
#include <iostream.h> |
|
#include <string.h> |
|
#include <stdio.h> |
|
#include <stdlib.h> |
|
#define N 100 |
|
class book |
// БАЗОВЫЙ класс book |
{ protected: |
|
char name[40]; |
// название книги |
char author[40]; |
// имя автора |
public: |
|
book(char *,char *); |
// конструктор класса book |
book(){ |
}; |
~book(){}; |
// деструктор класса book |
void see();
void setName(char *s1); void setAuthor(char *s2);
}; |
|
|
class section : public book |
|
// ПРОИЗВОДНЫЙ класс |
{ |
|
|
char sect[40]; |
|
// раздел каталога |
public: |
|
|
section(char *, char *, char *); |
// конструктор класса section |
|
section(){}; |
|
|
~section(){}; |
|
// деструктор класса section |
void see(); |
|
|
}; |
|
|
book::book(char *s1,char *s2) |
//конструктор класса book |
|
{ |
|
|
strcpy(name,s1); |
|
// копирует содержимое строки s1 в строку name |
strcpy(author,s2); |
|
// копирует содержимое строки s2 в строку author |
} |
|
|
void book::see() |
//функция просмотра класса book |
|
{ |
|
|
cout<<"name : "<<name<<"\author: "<<author;
}
section::section(char *s1,char *s2,char *s3) : book(s1,s2) //конструктор класса section
{
strcpy(sect,s3); |
//копирует содержимое строки s3 в строку sect |
} |
|
void section::see() |
//функция просмотра класса section |
{ |
|
cout<<"the name of the book is: "<<name<<endl; //вывод на экран названия книги
cout<<"the author of the book is: "<<author<<endl; //вывод на экран имяни автора cout<<"the section is: "<<sect<<endl; //вывод на экран жанра книги
}
void main()
{
int choice,num=0,j; |
|
char name[10]; |
//объявление переменных |
char author[10]; |
|
char sect[10]; |
|
section s[N]; |
|
while(choice!=3){ |
|
cout<<"\nenter 1 to add a book"<<endl; //вывод меню cout<<"enter 2 to delete a book"<<endl;
cout<<"enter 3 to quit"<<endl; |
|
cin>>choice; |
//ввод парамметров меню |
if(choice==1){ |
//обработка пунктов меню |
cout<<"input the name of the book "<<endl; |
|
cin>>name; |
//ввод имяни автора |
cout<<"input the author of the book "<<endl; |
|
cin>>author; |
//ввод имяни автора |
cout<<"input the section"<<endl; |
|
cin>>sect; |
//ввод жанра |
section s1(name,author,sect); //создание объекта класса section s[num]=s1;
num++;
}
else if(choice==2){
cout<<"input the number of the entry you want to delete (less
than"<<num<<")"<<endl; |
|
cin>>j; |
//ввод номера для удаления |
if(j>=num) |
//обработка ввода несуществующей записи |
cout<<"invalid entry"<<endl;
else
{
num--;
for(int i=j;i<num;i++){ //удаление элемента массива s[i]=s[i+1];
}
}
}
if(choice==3)
break;
else if(choice!=1 && choice!=2 && choice !=3) //обработка ввода не правельных значений
cout<<"invalid entry"<<endl;
for(int i=0;i<num;i++){
s[i].see(); //вызов функци see для элемента массива s
}
}
}
Рисунок 1 – Проверка работы программы