Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лабы первая часть оопип

.pdf
Скачиваний:
23
Добавлен:
01.04.2014
Размер:
131.01 Кб
Скачать

Министерство Образования Республики Беларусь Учреждение Образования

БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ

Кафедра Экономической Информатики

Контрольная работа по дисциплине

«Объектно-ориентированное проектирование и программирование»

Выполнил:

студент группы 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 – Проверка работы программы