Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП на языке С++.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆

2.9. Пример программы для Microsoft Visual Studio

Задание: создать иерархию классов – персона, студент, преподаватель и класс «список», хранящий объекты этих классов.

Файл list.h–Определение классов

Абстрактный класс Person содержит абстрактные(чистые виртуальные) функции Show() и Input(), которые должны быть определены в производных классах. В классе Person объявлен дружественный ему класс List.

class Person

{

public:

Person();

Person(char*,int );

virtual~Person(){};

virtual void Show()=0; //показать объект

virtual void Input()=0; //ввести значения данных объекта

friend class List;

protected:

char name[20]; //имя персоны

int age; //возраст персоны

Person* next; //указатель на следующий объект в списке

};

class Student:public Person{

public:

Student();

Student(char* NAME,int AGE,float GRADE);

void Show();

void Input();

protected:

float grade; //рейтинг

};

class Teacher:public Person{

public:

Teacher();

Teacher(char* NAME,int AGE,int WORK);

void Show();

void Input();

protected:

int work; //рабочий стаж

};

class List

{

private:

Person* begin; //указатель на начало списка

public:

List();

~List();

void Insert(Person*); //вставить в список объект

void Show(); //показать весь список

};

Файл person.cpp – Определение функций класс Person

#include<stdlib.h>

#include<iostream.h>

#include<string.h>

#include"list.h"

Person::Person()

{strcpy(name,"NONAME");

age=0;

next=0;};

Person::Person(char*NAME,int AGE)

{

strcpy(name,NAME);

age=AGE;

next=0;}

Файл student.cpp–Определение функций класса Student

#include<stdlib.h>

#include<iostream.h>

#include<string.h>

#include"list.h"

Student::Student()

{grade=0;}

Student::Student(char* NAME,int AGE,float GRADE) :Person(NAME,AGE)

{

grade=GRADE;

next=0;

}

void Student::Show(){cout<<"name="<<name<<" age="<<age<<" grade="<<grade<<endl;}

void Student::Input()

{

cout<<"name=";cin>>name;

cout<<"age=";cin>>age;

cout<<"grade=";cin>>grade;

}

Файл teacher.cpp– Определение функций класса Teacher

#include<stdlib.h>

#include<iostream.h>

#include<string.h>

#include"list.h"

Teacher::Teacher()

{work=0;}

Teacher::Teacher(char* NAME,int AGE,int WORK):Person(NAME,AGE)

{

work=WORK;

next=0;

}

void Teacher::Show(){cout<<"name="<<name<<" age="<<age<<" work="<<work<<endl;}

void Teacher::Input()

{

cout<<"name=";cin>>name;

cout<<"age=";cin>>age;

cout<<"work=";cin>>work;

}

Файл list.cpp–Определение функций класса List

#include<stdlib.h>

#include<iostream.h>

#include<string.h>

#include"list.h"

List::List(){begin=0;} //создается пустой список

List::~List(){

Person*r;

//проходим по списку и удаляем каждый объект

while(begin!=0){

r=begin;

begin=begin->next;

delete r;}}

void List::Insert(Person*p){

Person *r;

//вставляем объект в начало списка

r=begin;

begin=p;

p->next=r;}

void List::Show()

{Person *r;

r=begin;

//проходим по списку и вызываем для каждого объекта

//его виртуальную функцию Show

while(r!=0)

{r->Show();

r=r->next;}

}

Файл main.cpp–Демонстрационная программа

#include<iostream.h>

#include"list.h"

#include<process.h>

int main()

{

List list;

Student* ps;

Teacher* pt;

ps=new Student("Ivanov",21,50.5);

list.Insert(ps);

pt=new Teacher("Petrov",34,10);

list.Insert(pt);

ps=new Student;

ps->Input();

list.Insert(ps);

pt=new Teacher;

pt->Input();

list.Insert(pt);

list.Show();

system("pause");

return 0;

}