0% au considerat acest document util (0 voturi)
72 vizualizări14 pagini

Proiect Poo

Documentul prezintă tema unui proiect POO care constă în definirea unei ierarhii de clase abstracte și derivate. Se definesc clasele Carte, Proza și Versuri cu atribute și metode specifice fiecăreia. Programul permite crearea, citirea, modificarea și ștergerea obiectelor din aceste clase.

Încărcat de

Donia Andrei
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
72 vizualizări14 pagini

Proiect Poo

Documentul prezintă tema unui proiect POO care constă în definirea unei ierarhii de clase abstracte și derivate. Se definesc clasele Carte, Proza și Versuri cu atribute și metode specifice fiecăreia. Programul permite crearea, citirea, modificarea și ștergerea obiectelor din aceste clase.

Încărcat de

Donia Andrei
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

ETTI

PROIECT POO

Student: Stan Raluca Petronela


An: III
Grupa: 5305
An Universitar 2011-2012

Tema proiect nr. 6


S se defineasc adecvat o clas abstract cu numele Carte, din care s se deriveze public
clasele Proza i Versuri.
Clasa Carte va avea ca date membru private nr_pagini (int) i autor (ir), clasa Proza va avea
data privat nr_capitole , iar clasa Versuri va avea dat membru privat tip_rima (enum). Tipul de
data ir va fi un tip utilizator (clas separat).
In mod adecvat, pentru clasa de baz i clasele derivate se vor defini constructori,
constructorul de copiere, supraincarcarea operatorilor de insertie i extractie, destructori. S se
construiasc cele doua clase astfel nct s poat fi exploatat polimorfismul.
Sa se scrie un program care s evidentieze comportamentul polimorfic, definind
corespunztor un tablou cu elemente de tip adecvat, creat in funcie de opiunea utilizatorului.
Sa se proiecteze i apeleze adecvat o funcie care are ca argument un obiect din ierahia de
clase i, apeland la funcia de identificare, afieaz un mesaj privitor la clasa careia i aparine. Se va
folosi mecanismul polimorfic astfel nct funcia s poat fi apelat pentru obiecte aparinnd
ambelor clase.

///targetver.h//
#pragma once
// The following macros define the minimum required platform. The minimum
required platform
// is the earliest version of Windows, Internet Explorer etc. that has the
necessary features to run
// your application. The macros work by enabling all features available on
platform versions up to and
// including the version specified.
// Modify the following defines if you have to target
ones specified below.
// Refer to MSDN for the latest info on corresponding
platforms.
#ifndef _WIN32_WINNT
// Specifies that the
platform is Windows Vista.
#define _WIN32_WINNT 0x0600
// Change this to the
target other versions of Windows.
#endif

a platform prior to the


values for different
minimum required
appropriate value to

// stdafx.h//
// : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <conio.h>
#include <limits>
#include <fstream>
///[Link]///
//
//
//
//

TODO: reference additional headers your program requires here


[Link] : source file that includes just the standard includes
proiect_tema_6.pch will be the pre-compiled header
[Link] will contain the pre-compiled type information

#include "stdafx.h"
// TODO: reference any additional headers you need in STDAFX.H
// and not in this file

///Carte.h///
#pragma once
#includestdafx.h
#include <iostream>
#if !defined CARTE_H
#define CARTE_H
#include Sir.h
using namespace std;
class Carte
{
private:
int nr_pagini;
Sir autor;
public:
Carte(void);
Carte(int, Sir);
Carte(Carte &);
~Carte(void);
void SetNrPag(int);
int GetNrPag();
void SetAutor(Sir);
Sir GetAutor();
virtual void Read(istream &);
virtual void Write(ostream &);
virtual char* Identity();
Carte operator =(Carte const &);
friend istream & operator >>(istream &, Carte &);
friend ostream & operator <<(ostream &, Carte &);

};
#endif
///[Link]///
#include "StdAfx.h"
#include "Carte.h"
Carte::Carte(void)
{
nr_pagini = 0;
Sir autor();
}
Carte::~Carte(void)
{

}
Carte::Carte(Carte & carte)
{
nr_pagini = carte.nr_pagini;
autor = [Link];
}
Carte::Carte(int nr_pagini , Sir autor)
{
this->nr_pagini = nr_pagini;
this->autor = autor;
}
void Carte::SetNrPag(int nr_pagini)
{
this->nr_pagini = nr_pagini;
}
int Carte::GetNrPag()
{
return nr_pagini;
}
void Carte::SetAutor(Sir autor)
{
this->autor = autor;
}
Sir Carte::GetAutor()
{
return autor;
}
void Carte::Read(istream &Strin)
{
Strin>>autor;
Strin>>nr_pagini;
}
void Carte::Write(ostream &Strout)
{
Strout<<autor<<"\n";
Strout<<nr_pagini<<"\n";
}
char* Carte::Identity()
{
return "Obiectul apartine clasei Carte";
this->GetAutor();
this->GetNrPag();
}
Carte Carte::operator =(Carte const & carte)
{
Carte temp;
temp.nr_pagini = carte.nr_pagini;
[Link] = [Link];

return temp;
}
istream & operator >>(istream &Strin, Carte &carte)
{
[Link](Strin);
return Strin;
}
ostream & operator <<(ostream &Strout, Carte &carte)
{
[Link](Strout);
return Strout;
}
///Versuri.h///
#pragma once
#include "Carte.h"
#ifndef VERSURI_H
#define VERSURI_H
class Versuri:public Carte
{
public:
enum tip_rima:int
{
incrucisata, imbratisata, imperecheata, monorima, rima_alba
};
private:
tip_rima rima;
public:
Versuri(void);
Versuri(tip_rima);
~Versuri(void);
void SetRima(tip_rima);
tip_rima GetRima();
void Read(istream &);
void Write(ostream &);
char* Identity();
Versuri operator =(Versuri &);
friend istream & operator >>(istream &, Versuri &);
friend ostream & operator <<(ostream &, Versuri &);
};
#endif

///[Link]///
#include "StdAfx.h"
#include "Versuri.h"
Versuri::Versuri(void)
{
}
Versuri::Versuri(tip_rima rima)
{
this->rima = rima;
}
Versuri::~Versuri(void)
{
}
void Versuri::SetRima(tip_rima rima)
{
this->rima = rima;
}
Versuri::tip_rima Versuri::GetRima()
{
return rima;
}
void Versuri::Read(istream &Strin)
{
int nr_pag;
Sir autor;
Strin>>nr_pag;
this->SetNrPag(nr_pag);
Strin>>autor;
this->SetAutor(autor);
int r;
Strin>>r;
switch(r)
{
case incrucisata:
rima = incrucisata;
break;
case imbratisata:
rima = imbratisata;
break;
case imperecheata:
rima = imperecheata;
break;
case monorima:
rima = monorima;
break;

case rima_alba:
rima = rima_alba;
break;
}
}
void Versuri::Write(ostream &Strout)
{
int nr_pag;
Sir autor;
nr_pag = this->GetNrPag();
Strout<<nr_pag;
autor = this->GetAutor();
Strout<<autor;
switch(rima)
{
case incrucisata:
Strout<<"0"<<"\n";
break;
case imbratisata:
Strout<<"1"<<"\n";
break;
case imperecheata:
Strout<<"2"<<"\n";
break;
case monorima:
Strout<<"3"<<"\n";
break;
case rima_alba:
Strout<<"4"<<"\n";
break;
}
}
char* Versuri::Identity()
{
return "Obiectul apartine clasei Versuri";
this->GetRima();
}
Versuri Versuri::operator =(Versuri & vers)
{
Versuri temp;
int pag;
pag = [Link]();
Sir autor;
autor = [Link]();
[Link](pag);
[Link](autor);
[Link] = [Link];
return temp;
}

istream & operator >>(istream &Strin, Versuri &vers)


{
[Link](Strin);
return Strin;
}
ostream & operator <<(ostream &Strout, Versuri &vers)
{
[Link](Strout);
return Strout;
}
///Proza.h///
#pragma once
#include "Carte.h"
#ifndef PROZA_H
#define PROZA_H
class Proza:public Carte
{
private:
int nr_capitole;
public:
Proza(void);
Proza(int);
~Proza(void);
void SetNrCap(int);
int GetNrCap();
void Read(istream &);
void Write(ostream &);
char* Identity();
Proza operator =(Proza &);
friend istream & operator >>(istream &, Proza &);
friend ostream & operator <<(ostream &, Proza &);
};
#endif
///[Link]///
#include "StdAfx.h"
#include "Proza.h"
Proza::Proza(void)
{
nr_capitole = 0;
}
Proza::Proza(int nr_capitole)
{
this->nr_capitole = nr_capitole;
}

Proza::~Proza(void)
{
}
void Proza::SetNrCap(int nr_capitole)
{
this->nr_capitole = nr_capitole;
}
int Proza::GetNrCap()
{
return nr_capitole;
}
void Proza::Read(istream &Strin)
{
int nr_pag;
Sir autor;
Strin>>nr_pag;
this->SetNrPag(nr_pag);
Strin>>autor;
this->SetAutor(autor);
Strin>>nr_capitole;
}
void Proza::Write(ostream &Strout)
{
int nr_pag;
Sir autor;
nr_pag = this->GetNrPag();
Strout<<nr_pag;
autor = this->GetAutor();
Strout<<autor;
Strout<<nr_capitole;
}
char* Proza::Identity()
{
return "Obiectul apartine clasei Proza";
this->GetNrCap();
}
Proza Proza::operator =(Proza & proza)
{
Proza temp;
int pag;
pag = [Link]();
Sir autor;
autor = [Link]();
[Link](pag);
[Link](autor);
temp.nr_capitole = proza.nr_capitole;
return temp;

}
istream & operator >>(istream &Strin, Proza &proza)
{
[Link](Strin);
return Strin;
}
ostream & operator <<(ostream &Strout, Proza &proza)
{
[Link](Strout);
return Strout;
}
///Sir.h///
#pragma once
#include<iostream>
using namespace std;
class Sir
{
private:
char *sir;
public:
Sir(void);
Sir(char*);
~Sir(void);
void SetSir(char*);
char* GetSir();
Sir operator =(Sir const &);
friend istream & operator >>(istream &, Sir &);
friend ostream & operator <<(ostream &, Sir &);
};
///[Link]///
#include "StdAfx.h"
#include "Sir.h"
#ifndef SIR_H
#define SIR_H
Sir::Sir(void)
{
sir = new char[50];
}
Sir::Sir(char *sir)
{
this->sir = sir;
}
Sir::~Sir(void)
{
delete []sir;
}

void Sir::SetSir(char *sir)


{
this->sir = sir;
}
char* Sir::GetSir()
{
return sir;
}
Sir Sir::operator =(Sir const &sir)
{
Sir temp;
strcpy([Link],[Link]);
return temp;
}
istream & operator >>(istream &Strin, Sir &sir)
{
char temp[100];
Strin>> temp;
[Link] = new char[strlen(temp) + 1];
strcpy_s([Link], strlen(temp) + 1, temp);
return Strin;
}
ostream & operator <<(ostream &Strout, Sir &sir)
{
Strout<<[Link]<<"\n";
return Strout;
}
#endif
///proiect_tema_6.cpp///
// proiect_tema_6.cpp : Defines the entry point for the console application.
//
#include
#include
#include
#include

"stdafx.h"
"Carte.h"
"Versuri.h"
"Proza.h"

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


{
int i = 0;
int ind, op, op1, op2;
int pag;
char* nume;
Carte *obiecte;
Carte carte;
Versuri vers;
Proza proza;
ofstream oFileStr2("[Link]");
do

{
cout<<"[Link] un element nou\[Link]
elementele\[Link] elementele\[Link] elementele\n ";
cin>>op;
switch(op)
{
case 1:
{
cout<<"[Link]\[Link]\[Link]\n";
cin>>op1;
switch(op1)
{
case 1:
{
cout<<"Dati numele
autorului si nr de pagini:\n";
cin>>carte;
obiecte[i++] = carte;
oFileStr2<<carte;
}
case 2:
{
cout<<"Dati numele
autorului, nr de pagini si tipul rimei (0 = incrucisata ,1 = imbratisata ,2 =
imperecheata ,3 = monorima ,4 = rima_alba:\n";
cin>>vers;
obiecte[i++] = vers;
oFileStr2<<vers;
}
case 3:
{
cout<<"Dati numele
autorului, nr de pagini si nr de capitole:\n";
cin>>proza;
obiecte[i++] = proza;
oFileStr2<<proza;
}
break;
}
}
case 2:
{
for(int j = 0; j<i; j++)
{
cout<<j<<". ";
cout<<obiecte[j];
//apel fctia identitate
cout<<obiecte[j].Identity();
cout<<endl;
}
break;
}
case 3:
{

cout<<"Introduceti indicele elementului


pe care doriti sa il modificati:\n";
cin>>ind;
while(ind>i)
{
cout<<"Obiectul nu a fost creat\n";
cout<<"Introduceti indicele
elementului pe care doriti sa il modificati:\n";
cin>>ind;
}
cout<<obiecte[ind].Identity();
cout<<"[Link] numarul de
pagini\[Link] numele autorului\n";
cin>>op2;
switch (op2)
{
case 1:
{
cout<<"Introduceti noul
numar de pagini: ";
cin>>pag;
obiecte[ind].SetNrPag(pag);
cout<<"Obiectul
modificat este \n"<<obiecte[ind]<<endl;
}
break;
case 2:
{
cout<<"Introduceti noul
nume de autor: ";
cin>>nume;
obiecte[ind].SetAutor(nume);
cout<<"Obiectul
modificat este \n"<<obiecte[ind]<<endl;
}
break;
}
}
break;
case 4:
{
for(int j = 0; j<i; j++)
obiecte[j].~Carte();
}
}
}
while(op<=4 && op>=1);
[Link]();
getchar();
}

S-ar putea să vă placă și