Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /***
- se considerã un program care descrie organizarea personalului unei instituþii folosid claselor derivate. O clasã numitã Angajat deþine date ºi funcþii referitoare la un angajat al instituþiei:
- class Angajat {
- char * nume;
- float salariu;
- public:
- Angajat();
- Angajat(char *n, int s, float sal);
- Angajat(Angajat& r);
- void display();
- float getSalariu();
- void setSalariu(float s);
- };
- Diferite categorii de angajaþi necesitã date suplimentare faþã de cele definite în clasa Angajat, corespunzãtoare postului pe care îl deþin. De exemplu, un ºef de secþie (administator) este un angajat (deci sunt necesare toate datele care descriu aceastã calitate) dar mai sunt necesare ºi alte informaþii, de exemplu precizare secþiei pe care o conduce. Un administrator este un angajat, de aceea clasa Administrator se poate construi prin derivare din clasa Angajat astfel:
- class Administrator : public Angajat {
- int sectie;
- public:
- Administrator(const char *n, float sal, int sec);
- Administrator(Administrator& r);
- ~Administrator();
- };
- Sa se implementeze aceasta ierarhie de clase.
- ***/
- #include<iostream>
- #include<string.h>
- #include<conio.h>
- using namespace std;
- class Angajat {
- protected:
- char * nume;
- float salariu;
- public:
- Angajat(char *n="", float sal=0);
- Angajat(Angajat& r);
- ~Angajat();
- void display();
- float getSalariu();
- void setSalariu(float s);
- void setNume(char *nume);
- Angajat& operator =(Angajat &a);
- };
- Angajat::Angajat(char *n, float sal) {
- this->nume=new char[strlen(n)+1];
- this->salariu=sal;
- strcpy(this->nume, n);
- }
- Angajat::Angajat(Angajat& r) {
- this->nume=new char[strlen(r.nume)+1];
- strcpy(this->nume, r.nume);
- this->salariu=r.salariu;
- }
- Angajat::~Angajat() {
- delete []nume;
- }
- void Angajat::display() {
- cout<<"Angajat :"<<nume<<", salariu: "<<salariu<<endl;
- }
- float Angajat::getSalariu() {
- return this->salariu;
- }
- void Angajat::setSalariu(float salariu) {
- this->salariu=salariu;
- }
- void Angajat::setNume(char * nume) {
- if(strlen(this->nume)<strlen(nume)) {
- delete this->nume;
- this->nume=new char[strlen(nume)+1];
- }
- strcpy(this->nume,nume);
- }
- Angajat& Angajat :: operator =(Angajat &a) {
- if(this!=&a) {
- if(strlen(this->nume)<strlen(a.nume)) {
- delete this->nume;
- this->nume=new char[strlen(a.nume)+1];
- this->salariu=a.salariu;
- }
- strcpy(this->nume,a.nume);
- }
- return *this;
- }
- ///********************************************************************
- class Administrator : public Angajat {
- protected:
- char* sectie;
- public:
- Administrator(char *nume, float salariu, char * sectie);
- Administrator( const Administrator& r);
- ~Administrator();
- void display();
- Administrator & operator =(Administrator &b);
- };
- Administrator::Administrator( char *nume, float salariu, char* sectie):Angajat(nume,salariu){
- this->sectie=new char[strlen(sectie)+1];
- strcpy(this->sectie, sectie );
- }
- Administrator::Administrator(const Administrator& r):Angajat(r.nume, r.salariu){
- this->sectie=new char[strlen(r.sectie)+1];
- strcpy(this->sectie, r.sectie );
- }
- Administrator::~Administrator(){
- delete[]sectie;
- }
- void Administrator::display(){
- Angajat::display();
- cout<<"Sectie "<<sectie<<endl;
- }
- Administrator& Administrator:: operator =( Administrator &b){
- if(this!=&b){
- Angajat::operator=(b);
- delete[] sectie;
- sectie=new char[strlen(b.sectie)+1];
- strcpy(this->sectie, b.sectie);
- }
- return *this;
- }
- int main() {
- Angajat a1("Puisor", 3000);
- a1.display();
- cout<<endl;
- Angajat a2("Sui", 100000);
- a2.display();
- cout<<endl;
- Angajat a3;
- a3=a1;
- a3.display();
- cout<<endl;
- a3.setNume("Pui");
- a3.display();
- cout<<endl;
- a1.display();
- Administrator adm1("Ion", 2000, "scule");
- adm1.display();
- cout<<endl;
- Administrator adm2("Ionel", 5000, "dispozitive");
- adm2.display();
- cout<<endl;
- Administrator adm3("Ionica", 4000, "verificatoare");
- adm3.display();
- cout<<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment