Хабаровский Государственный Технический Университет
Кафедра ПОВТ и АС
Лабораторная работа по ООП №1
Выполнил: ст-т группы ПО-12 Черенков В.Л.
Проверил: Потапов И.И.
Хабаровск 2004
Задание: Для произвольной предметной области создать иерархию классов (5-6 классов). Корень иерархии должен быть абстрактным и иметь минимум два абстрактных метода, переопределённых в потомках. Реализация методов минимальна. После создания классов создаём несколько экземпляров классов, помещаем их в произвольный контейнер и в цикле показываем реализацию методов для этих объектов.
Конкретизация задания: Выбираем предметную область Библиотека. Для неё строим следующую иерархию:
Для каждого класса определены некоторые свойства и три метода: printinfo, getname и setname.
Листинг программы:
//--------------------------------------------------------------------------#include <vcl.h>
#include <conio.h>
#pragma hdrstop
#include "Unit1.h"
#include <dstring.h>
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------//declaration of base class Fond
class Fond
{
public:
AnsiString FondName;
int *Size;//dynamic var
virtual void printinfo()=0;
virtual AnsiString getname()=0;
virtual void setname(AnsiString)=0;
//constructor
Fond() {FondName="NotNamed";Size=new int;*Size=0;}
//destructor
virtual ~Fond() {delete Size;}
};//end of declaration class Fond
//declaration of class Library
class Library:public Fond
{
AnsiString *LibName;//dynamic var
public:
void printinfo();//realization not here
AnsiString getname() {return *LibName;}
void setname(AnsiString N) {*LibName=N;}
//constructor
Library():Fond() {LibName = new AnsiString;*LibName="NotNamed";}
//destructor
virtual ~Library(){delete LibName;}
};//end of declaration class Library
//declaration of class Author
class Author:public Library
{
AnsiString AuthorName;
public:
int Year,Month,Day;
AnsiString *Nation;
void printinfo();
AnsiString getname() {return AuthorName;}
void setname(AnsiString N) {AuthorName=N;}
void setdate(int D,int M, int Y) {Day=D;Month=M;Year=Y;}
//constructors
Author():Library()
{AuthorName="Unnamed";Year=0;Month=0;Day=0;
Nation=new AnsiString;*Nation="Unknown";}
Author(AnsiString N,int D,int M,int Y,AnsiString Nat):Library()
{AuthorName=N;Day=D;Month=M;Year=Y;Nation=new AnsiString;*Nation=Nat;}
//destructor
virtual ~Author() {delete Nation;}
};//end of declaration class Author
//declaration of class Book
class Book:public Author
{
public:
AnsiString *BookName;
int *Pages,*YearIzd;
void printinfo();
void setauthor(Author *A);
AnsiString getname() {return *BookName;}
void setname(AnsiString N) {*BookName=N;}
//constructors
Book():Author() {BookName = new AnsiString;*BookName="Unnamed Book";
Pages = new int;*Pages=0;YearIzd = new int;
*YearIzd=0;}
Book(AnsiString N,int P,int Y):Author()
{BookName = new AnsiString;*BookName=N;
Pages = new int;*Pages=P;YearIzd = new int;
*YearIzd=Y;}
//destructor
~Book() {delete BookName,Pages,YearIzd;}
};//end of declaration class Book
//declaration of class Magazine
class Magazine:public Author
{
AnsiString *MagName;
public:
int* Pages,*YearIzd,*Number,*NYear;
void printinfo();
void setauthor(Author *A);
AnsiString getname() {return *MagName;}
void setname(AnsiString N) {*MagName=N;}
//constructors
Magazine():Author() {MagName = new AnsiString;*MagName="Unnamed Magazine";
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.