Индивидуальное задание №2




Задание: для класса "Служащий" переопределить операции сравнения, реализовав сравнение по окладу, отделу, должности и стажу работы в организации.

Диаграмма классов:

 

Описание:

Класс employee расширен и включает: поля - объекты классов position и division и методы работы с ними; перегруженные операции сравнения согласно заданию.

 

Исходный код:

Employee.h

#pragma once

#include "Human.h"

 

class division

{

int grade_;

char* name_;

public:

division();

~division();

void set_divisionG (int & grade);

void set_divisionN (char* name);

int get_grade() const;

char* get_name() const;

 

};

 

class position

{

int grade_;

char* name_;

public:

position();

~position();

void set_positionG (int & grade);

void set_positionN (char* name);

int get_grade() const;

char* get_name() const;

};

 

class employee:

public Human

{

friend ostream &operator<<(ostream & os, const employee &entry);

friend istream &operator>>(istream & os, employee &entry);

 

 

private:

char* company_;

int employment_duration, payment_;

position position_;

division division_;

 

 

public:

employee();

employee (char* company, int duration, char* Name, char* Sur, bool M_W, int division_grade, int position_grade, int payment);

 

employee (const employee & entry);

void set_company (char* Name);

char* get_company() const;

~employee();

void set_duration (int & prolong);

int get_duration() const;

int get_payment() const;

employee & operator=(const employee & st);

 

void set_divisionG(int & grade);

void set_divisionN(char* name);

void set_positionG(int & grade);

void set_positionN(char* name);

 

char* get_position() const;

char* get_division() const;

 

bool operator== (const employee & st) const;

bool operator> (const employee & st) const;

bool operator< (const employee & st) const;

bool operator!= (const employee & st) const;

 

};


Employee.cpp

#define _CRT_SECURE_NO_WARNINGS

#include "employee.h"

using namespace std;

 

position::position()

{

name_=(char*) calloc(1, sizeof(char*));

};

position::~position()

{

free(name_);

};

void position::set_positionN(char* name)

{

if (name=="Boss") grade_=4;

else if (name=="Main_Ingineer") grade_=3;

else if (name=="Ingineer") grade_=2;

else grade_=1;

 

name_=(char*) realloc (name_, (1+strlen(name))*sizeof(char*));

strcpy(name_, name);

};

void position::set_positionG(int & grade)

{

grade_=grade;

switch(grade_)

{

case 1: name_=(char*) realloc (name_, (1+strlen("Worker"))*sizeof(char*));

strcpy(name_, "Worker");

break;

case 2: name_=(char*) realloc (name_, (1+strlen("Ingineer"))*sizeof(char*));

strcpy(name_, "Ingineer");

break;

 

case 3: name_=(char*) realloc (name_, (1+strlen("Main_Ingineer"))*sizeof(char*));

strcpy(name_, "Main_Ingineer");

break;

 

case 4: name_=(char*) realloc (name_, (1+strlen("Boss"))*sizeof(char*));

strcpy(name_, "Boss");

break;

 

}

};

int position::get_grade() const

{

return grade_;

};

char* position::get_name() const

{

return name_;

};

 

 

division::division()

{

name_=(char*) calloc(1, sizeof(char*));

};

division::~division()

{

free(name_);

};

void division::set_divisionN(char* name)

{

if (name=="Bosses") grade_=4;

else if (name=="Main_Technicians") grade_=3;

else if (name=="Technicians") grade_=2;

else grade_=1;

 

name_=(char*) realloc (name_, (1+strlen(name))*sizeof(char*));

strcpy(name_, name);

};

void division::set_divisionG(int & grade)

{

grade_=grade;

switch(grade)

{

case 1: name_=(char*) realloc (name_, (1+strlen("Workers"))*sizeof(char*));

strcpy(name_, "Workers");

break;

case 2: name_=(char*) realloc (name_, (1+strlen("Technicians"))*sizeof(char*));

strcpy(name_, "Technicians");

break;

 

case 3: name_=(char*) realloc (name_, (1+strlen("Main_Technicians"))*sizeof(char*));

strcpy(name_, "Main_Technicians");

break;

 

case 4: name_=(char*) realloc (name_, (1+strlen("Bosses"))*sizeof(char*));

strcpy(name_, "Bosses");

break;

 

}

};

int division::get_grade() const

{

return grade_;

};

char* division::get_name() const

{

return name_;

};

 

 

employee::employee()

:Human()

{

company_=(char*) calloc(1, sizeof(char*));

};

employee::employee (char* company, int duration, char* Name, char* Sur, bool M_W, int division_grade, int position_grade, int payment)

: Human (Name, Sur, M_W)

{

employment_duration=duration;

company_=(char*) calloc (1+strlen(company), sizeof(char*));

strcpy(company_, company);

 

payment_=payment;

division_.set_divisionG(division_grade);

position_.set_positionG(position_grade);

 

};

employee::employee (const employee & entry)

{

employment_duration=entry.employment_duration;

company_=(char*) realloc (company_, (1+strlen(entry.company_))*sizeof(char*));

strcpy(company_, entry.company_);

 

set_name(entry.get_name());

set_surname(entry.get_surname());

set_genderB(entry.get_gender());

 

int a=entry.division_.get_grade();

division_.set_divisionG(a);

a=entry.position_.get_grade();

position_.set_positionG(a);

};

void employee::set_company (char* Name)

{

company_=(char*) realloc (company_, (1+strlen(Name))*sizeof(char*));

strcpy(company_, Name);

};

char* employee::get_company() const

{

return company_;

};

employee::~employee()

{

free(company_);

del_name();

};

void employee::set_duration (int & prolong)

{

employment_duration=prolong;

};

int employee::get_duration() const

{

return employment_duration;

};

ostream &operator<<(ostream & os, const employee &entry)

{

os<<"Name: "<<entry.get_name()<<" "<<entry.get_surname()<<endl;

return os;

};

istream &operator>>(istream & os, employee &entry)

{

char A,B;

os>>A>>B>>entry.company_;

entry.set_name(&A);

entry.set_surname(&B);

return os;

};

employee & employee::operator=(const employee & st)

{

if (this==&st)

return *this;

company_=(char*) realloc (company_, (1+strlen(st.get_company()))*sizeof(char*));

strcpy(company_, st.get_company());

employment_duration=st.get_duration();

 

set_name(st.get_name());

set_surname(st.get_surname());

set_genderB(st.get_gender());

 

int a=st.division_.get_grade();

division_.set_divisionG(a);

 

a=st.position_.get_grade();

position_.set_positionG(a);

return *this;

};

char* employee::get_division() const

{

return division_.get_name();

};

char* employee::get_position() const

{

return position_.get_name();

};

int employee::get_payment() const

{

return payment_;

};

bool employee::operator== (const employee & st) const

{

if (st.get_payment()==payment_) return true;

else return false;

 

};

bool employee::operator> (const employee & st) const

{

if(division_.get_grade()>st.division_.get_grade()) return true;

else return false;

};

bool employee::operator< (const employee & st) const

{

if(position_.get_grade()>st.position_.get_grade()) return true;

else return false;

};

bool employee::operator!= (const employee & st) const

{

if(get_duration()!=st.get_duration()) return true;

else return false;

};

 


 

 

 

Пример программы с использованием созданных классов:

#include "employee.h"

 

int main()

{

employee man("Music_Factory", 4, "Biggie", "Jefferson", true, 3, 3, 200);

employee man_0("Pixels", 3, "Sam", "Adams", true, 4, 4, 500);

 

if(man_0>man) cout<<man_0;

 

system("PAUSE");

return 0;

}

 

 

Вывод: изучены на практике принципы создания операторов/операций, специфичных для объектов одного класса.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: