Представление информации (данных о туристах: фамилия, возраст и пол) в виде класса

Страницы работы

Содержание работы

Министерство образования и науки, молодежи и спорта

Национальный аэрокосмический университет им. Н.Е.Жуковского “ХАИ”

кафедра 304

Лабораторная работа №4

по предмету «Программирование»

Выполнил студент

315 группы

Абкеримова Р.Р.

Проверил

доц. каф. 304

Бакуменко Н.С.

Харьков 2013

Лабораторная работа №3

                                                         «Классы»        

Цель:

Изучить теоретический и практический материал по теме.

Постановка задачи:

Задание

Представить данную в варианте информацию в виде класса.

Реализовать функции считывания из файла/консоли и записи в файл/консоль полученный класс.

Сформировать набор данных (массив), где каждый элемент является разработанным классом. Этот набор тоже может быть оформлен как класс.

Программа должна содержать, по крайней мере, два класса – первый, описывающий  поля Вашего класса, согласно заданию, а второй – содержащий массив из элементов первого класса.

Каждый из классов должен иметь, по крайней мере, один конструктор. Если класс содержит указатели, то и деструктор.

Все поля каждого класса должны быть описаны как private

Для каждого класса необходимо реализовать  - переопределить операции ввода-вывода <<  и >>, например, как дружественные функции.

Текст программы должен содержать, пусть минимальные, спецификации – комментарии.

Для своего класса (классов) переопределить какую-нибудь операцию (операции). По возможности операции должны быть полезными при выполнении заданий Вашего варианта.

Вариант 1

Турист: фамилия, возраст и пол.

Найти: средний возраст всех туристов; фамилии всех женщин.

Текст программы:

Класс предок:

#pragma once

#include <iostream>

#include <string>

using namespace std;

class Turist

{

public:

       Turist(void);//конструктор по умолчанию

       Turist (char* f,char *p,int a); //конструктор заполнение данными

       void in();//функция ввода

       string getPol();

       int getAge();

       string getFam();

       void SetPol(char *);

       void SetFam(char *);

       void SetAge(int);

       void out();//функция выводда

       friend ostream & operator<< (ostream & output, Turist B); //перегрузка потока вывода

       friend istream & operator>> (istream & input , Turist B); //перегрузка потока ввода

       ~Turist(void);

private:

       char *fam; //переменная типа char указательного типа

       char *pol; //переменная типа char указательного типа

       int *age; //переменная типа инт указательного типа

};

Реализация класса предка:

#include "StdAfx.h"

#include "Turist.h"

#include <iostream>

#include <fstream>

#include <string>

using namespace std;

ostream &operator<< (ostream & output,const Turist B)//перегрузка потока вывода

{     

       output<<B.fam<<"   "<<B.pol<<"   "<<*B.age<<endl;

       return output;

}

istream &operator >> (istream &input,Turist B)//перегрузка потока ввода

{

       int age1;

       cout<<"Год = ";

       cin>>*B.age;

       cout<<"Фамилия: ";

       cin>>B.fam;

       cout<<"Пол: ";

       cin>>B.pol;

       return input;

}

Turist::Turist(void)

{

       setlocale(LC_ALL,"RUS");

       age = new int;// выделение памяти

       pol=(char*)calloc(100,sizeof(char));

       fam=(char*)calloc(100,sizeof(char));

}

void Turist::SetPol(char *a)

{

       strcpy(pol,a);

}

void Turist::SetFam(char *a)

{

       strcpy(fam,a);

}

void Turist::SetAge(int a)

{

       *age=a;

}

Turist::Turist (char* f,char *p,int a)

{

       setlocale(LC_ALL,"RUS");

       age = new int;// выделение памяти

       strcpy(fam,f);//заполняем значениями

       strcpy(pol,p);//заполняем значениями

       *age=a;

}

void Turist::in()//функция ввода

{

       cout<<"Год = ";

       cin>>*age;

       cout<<"Фамилия: ";

       cin>>fam;//пропускаеться

       cin>>fam;

       cout<<"Пол: ";

       cin>>pol;

}

string Turist::getPol()//функция ввода

{

       return pol;

}

string Turist::getFam()//функция ввода

{

       return fam;

}

int Turist::getAge()//функция ввода

{

       return *age;

}

void Turist::out()//функция ввода

{

       cout<<"Фамилия: "<<fam<<endl;

       cout<<"Пол: "<<pol<<endl;

       cout<<"Год = "<<*age<<endl;

}

Turist::~Turist(void)

{

       delete age,pol,fam;

}

Класс наследник:

#pragma once

#include "turist.h"

#include <iostream>

using namespace std;

const int n=3;

class MassTurist

{

public:

       MassTurist(int a, int b, int c, char* a1, char* b1, char* c1, char* a2,char* b2, char* c2);// конструктор с параметрами

       void out_w();

       double out_SreVoz();

       friend ostream & operator<< (ostream & output, MassTurist B); //перегрузка потока вывода

       friend istream & operator>> (istream & input, MassTurist B); //перегрузка потока ввода

       ~MassTurist(void);

       Turist A[n];

private:

};

Реализация класса наследника:

#include "StdAfx.h"

#include "MassTurist.h"

#include <iostream>

using namespace std;

MassTurist::MassTurist(int a, int b, int c, char* a1, char* b1, char* c1, char* a2,char* b2, char* c2)

{

       A[0].SetAge(a);

       A[0].SetFam(a1);

       A[0].SetPol(a2);

       A[1].SetAge(b);

       A[1].SetFam(b1);

       A[1].SetPol(b2);

       A[2].SetAge(c);

       A[2].SetFam(c1);

       A[2].SetPol(c2);

}

ostream & operator<< (ostream & output, MassTurist B)//перегрузка потока вывода

{

       for(int i=0;i<n;i++)

       output<<B.A[i]; // вызов перегрузки вывода

       return output;

}

istream & operator>> (istream & input, MassTurist B)//перегрузка потока ввода

{

       for(int i=0;i<n;i++)

       input>>B.A[i];// вызов перегрузки ввода

       return input;

}

void MassTurist::out_w()

{

       cout<<"Список женщин:"<<endl;

       for(int i=0;i<n;i++)

       {

             if(A[i].getPol()=="w")

                    cout<<A[i].getFam()<<endl;

       }

}

double MassTurist::out_SreVoz()

{

       double sred=0;

       for(int i=0;i<n;i++)

             sred=sred + double(A[i].getAge());

       sred/=n;

       return sred;

}

MassTurist::~MassTurist(void)

{

}

Основная часть программы:

// Рушена_Класс.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include "Turist.h"

#include "MassTurist.h"

#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

       setlocale(LC_ALL,"RUS");

       MassTurist B(10,28,26,"Deeva","Abkerimova","Ivanov","w","w","m"); // сначала 3 числа, потом 3 фамилии, и 3 пола

       cout<<B<<endl;

       B.out_w();

       cout<<"Средний возраст = "<<B.out_SreVoz()<<endl;

       system("PAUSE");

       return 0;

}

Результат программы:

Похожие материалы

Информация о работе

Тип:
Отчеты по лабораторным работам
Размер файла:
56 Kb
Скачали:
0