Национальный аэрокосмический университет им. Н.Е.Жуковского “ХАИ”
кафедра 304
Лабораторная работа №4
по предмету «Программирование»
Выполнил студент
315 группы
Абкеримова Р.Р.
Проверил
доц. каф. 304
Бакуменко Н.С.
Харьков 2013
Лабораторная работа №3
«Классы»
Цель:
Изучить теоретический и практический материал по теме.
Постановка задачи:
Представить данную в варианте информацию в виде класса.
Реализовать функции считывания из файла/консоли и записи в файл/консоль полученный класс.
Сформировать набор данных (массив), где каждый элемент является разработанным классом. Этот набор тоже может быть оформлен как класс.
Программа должна содержать, по крайней мере, два класса – первый, описывающий поля Вашего класса, согласно заданию, а второй – содержащий массив из элементов первого класса.
Каждый из классов должен иметь, по крайней мере, один конструктор. Если класс содержит указатели, то и деструктор.
Все поля каждого класса должны быть описаны как private
Для каждого класса необходимо реализовать - переопределить операции ввода-вывода << и >>, например, как дружественные функции.
Текст программы должен содержать, пусть минимальные, спецификации – комментарии.
Для своего класса (классов) переопределить какую-нибудь операцию (операции). По возможности операции должны быть полезными при выполнении заданий Вашего варианта.
Турист: фамилия, возраст и пол.
Найти: средний возраст всех туристов; фамилии всех женщин.
Текст программы:
Класс предок:
#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;
}
Результат программы:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.