+ All Categories
Home > Documents > Programare orientatăpe obiecte 8 C++ Clase imbricate Adrian … · 2016. 12. 7. · (clasa...

Programare orientatăpe obiecte 8 C++ Clase imbricate Adrian … · 2016. 12. 7. · (clasa...

Date post: 04-Mar-2021
Category:
Upload: others
View: 1 times
Download: 0 times
Share this document with a friend
17
Programare orientat ă pe obiecte # 8 Adrian Runceanu www.runceanu.ro/adrian 2016 C++ Clase imbricate
Transcript
Page 1: Programare orientatăpe obiecte 8 C++ Clase imbricate Adrian … · 2016. 12. 7. · (clasa Cont_Bancar definită în interiorul clasei Client care conţine următoarele date: numărul

Programare orientată peobiecte

# 8

Adrian Runceanuwww.runceanu.ro/adrian

2016

C++Clase imbricate

Page 2: Programare orientatăpe obiecte 8 C++ Clase imbricate Adrian … · 2016. 12. 7. · (clasa Cont_Bancar definită în interiorul clasei Client care conţine următoarele date: numărul

[email protected]

Lucrarea de laborator nr. 8

În limbajul C++ se poate include declaraţia unei clase îninteriorul altei clase.

Clasa declarată în interiorul alteia se numeşte clasăimbricată (nested class) şi permite evitarea conflictelorde nume, noul tip având vizibilitate de clasă.

Funcţiile membre ale clasei ce conţin declaraţia pot creaşi folosi obiecte ale clasei imbricate.

07.12.2016 P.O.O. - limbajul C++ (laborator) 2

Page 3: Programare orientatăpe obiecte 8 C++ Clase imbricate Adrian … · 2016. 12. 7. · (clasa Cont_Bancar definită în interiorul clasei Client care conţine următoarele date: numărul

[email protected]

Lucrarea de laborator nr. 8

Imbricarea claselor nu este acelaşi lucru cu conţinerea.

Prin conţinere se înţelege că o clasă are ca membru un obiect al altei clase.

Imbricarea nu creează un membru al clasei, eadefineşte un tip care este cunoscut doar local în clasacare conţine declaraţia clasei imbricate.

Clasele imbricate se folosesc în special pentru a uşuraimplementarea altor clase și pentru evitarea conflictelorde nume.

07.12.2016 P.O.O. - limbajul C++ (laborator) 3

Page 4: Programare orientatăpe obiecte 8 C++ Clase imbricate Adrian … · 2016. 12. 7. · (clasa Cont_Bancar definită în interiorul clasei Client care conţine următoarele date: numărul

[email protected]

Lucrarea de laborator nr. 8

Problema nr. 1 Să se realizeze un program ce implementează o clasă

Patrulater care conţine patru date de tip Punct (clasaPunct defineşte şi afişează coordonatele unui punctdin plan şi este definită în interiorul clasei patrulater).

Să se realizeze o funcţie care determină naturapatrulaterului pe care îl formează cele 4 puncte(paralelogram, romb, dreptunghi, pătrat, trapez saupatrulater oarecare) şi o funcţie care calculează aria acestuia (cu excepţia cazului în care patrulaterul esteoarecare).

07.12.2016 P.O.O. - limbajul C++ (laborator) 4

Page 5: Programare orientatăpe obiecte 8 C++ Clase imbricate Adrian … · 2016. 12. 7. · (clasa Cont_Bancar definită în interiorul clasei Client care conţine următoarele date: numărul

[email protected]

Diagrama UMLClasa Punct imbricată în Clasa Patrulater

07.12.2016 P.O.O. - limbajul C++ (laborator) 5

Patrulater(-) Punct P1(-) Punct P2(-) Punct P3(-) Punct P4(+) float laturi[4](+) float diag1, diag2

(+) Patrulater (Punct P1, Punct P2, Punct P3, Punct P4)(+) void Calculeaza_Laturi()(+) int Tip_Patrulater()(+) void Afisare_Patrulater(void)

(+) Clasa Punct

(+) float x, y

(+) Punct ()(+) Punct (X, Y)(+) void Afisare_Punct()

Page 6: Programare orientatăpe obiecte 8 C++ Clase imbricate Adrian … · 2016. 12. 7. · (clasa Cont_Bancar definită în interiorul clasei Client care conţine următoarele date: numărul

[email protected]

Lucrarea de laborator nr. 8

Solutie:

#include <iostream>#include <stdio.h>#include <conio.h>#include <math.h>#include <stdlib.h>

using namespace std;

07.12.2016 P.O.O. - limbajul C++ (laborator) 6

Page 7: Programare orientatăpe obiecte 8 C++ Clase imbricate Adrian … · 2016. 12. 7. · (clasa Cont_Bancar definită în interiorul clasei Client care conţine următoarele date: numărul

[email protected]

Lucrarea de laborator nr. 8class Patrulater {public:

class Punct{public:

float x,y;Punct (void) { // Primul Constructor

x = y = 0;}Punct (float X , float Y) { // Al doilea Constructor

x = X;y = Y;

}void Afisare_Punct(){

cout <<"\nCoordonatele Punctului sunt : x = " << x << " y = " << y ;}

}; // sf. clasa Punct07.12.2016 P.O.O. - limbajul C++ (laborator) 7

Page 8: Programare orientatăpe obiecte 8 C++ Clase imbricate Adrian … · 2016. 12. 7. · (clasa Cont_Bancar definită în interiorul clasei Client care conţine următoarele date: numărul

[email protected]

Lucrarea de laborator nr. 8

private:Punct p1; Punct p2; Punct p3; Punct p4;

public:float laturi[4]; // in acest vector retinem lungimile laturilor

float diag1, diag2;Patrulater (Punct P1, Punct P2, Punct P3, Punct P4){

p1 = * new Punct (P1.x , P1.y );p2 = * new Punct (P2.x , P2.y );p3 = * new Punct (P3.x , P3.y );p4 = * new Punct (P4.x , P4.y );Calculeaza_Laturi();

}

07.12.2016 P.O.O. - limbajul C++ (laborator) 8

Page 9: Programare orientatăpe obiecte 8 C++ Clase imbricate Adrian … · 2016. 12. 7. · (clasa Cont_Bancar definită în interiorul clasei Client care conţine următoarele date: numărul

[email protected]

Lucrarea de laborator nr. 8

void Calculeaza_Laturi(){

laturi[0] = sqrt ( pow (p1.x - p2.x ,2 ) + pow (p1.y - p2.y, 2));laturi[1] = sqrt ( pow (p2.x - p3.x ,2 ) + pow (p2.y - p3.y, 2));laturi[2] = sqrt ( pow (p3.x - p4.x ,2 ) + pow (p3.y - p4.y, 2));laturi[3] = sqrt ( pow (p4.x - p1.x ,2 ) + pow (p4.y - p1.y, 2));diag1 = sqrt ( pow (p1.x - p3.x ,2 ) + pow (p1.y - p3.y, 2));diag2 = sqrt ( pow (p4.x - p2.x ,2 ) + pow (p4.y - p2.y, 2));

}

07.12.2016 P.O.O. - limbajul C++ (laborator) 9

Page 10: Programare orientatăpe obiecte 8 C++ Clase imbricate Adrian … · 2016. 12. 7. · (clasa Cont_Bancar definită în interiorul clasei Client care conţine următoarele date: numărul

[email protected]

Lucrarea de laborator nr. 8int Tip_Patrulater()

{if (((p1.x==p2.x)&&(p2.x==p3.x)&&(p1.x=p3.x)) || (

(p1.x==p2.x)&&(p1.x==p4.x)&&(p2.x==p4.x) ) || ( (p1.x==p3.x)&&(p3.x==p4.x)&&(p1.x==p4.x) ) || ( (p2.x==p3.x)&&(p3.x==p4.x)&&(p2.x==p4.x) ) ) return -1;

if (((p1.y==p2.y)&&(p2.y==p3.y)&&(p1.y=p3.y)) || ( (p1.y==p2.y)&&(p1.y==p4.y)&&(p2.y==p4.y) ) || ( (p1.y==p3.y)&&(p3.y==p4.y)&&(p1.y==p4.y) ) || ( (p2.y==p3.y)&&(p3.y==p4.y)&&(p2.y==p4.y) ) ) return -1;

// daca am ajuns aici inseamna ca cele 4 laturi pot forma un patrulater;if ( (laturi[0] == laturi [1]) &&(laturi[1] == laturi[2]) && (diag1==diag2))return 1; // 1 inseamna ca patrulaterul este patratelse{if ( (laturi[0] == laturi [1]) && (laturi[1] == laturi[2]) && (diag1!=diag2))return 2; // 2 = romb

07.12.2016 P.O.O. - limbajul C++ (laborator) 10

Page 11: Programare orientatăpe obiecte 8 C++ Clase imbricate Adrian … · 2016. 12. 7. · (clasa Cont_Bancar definită în interiorul clasei Client care conţine următoarele date: numărul

[email protected]

Lucrarea de laborator nr. 8

else{

if ( (laturi[0] == laturi [2]) && (laturi[1] == laturi[3]) && (diag1!=diag2) )

return 3; // 3 = paralelogram

if ( (laturi[0] == laturi [2]) && (laturi[0]!=laturi[1]) && (diag1==diag2) )

return 4; // 4 = dreptunghi

elsereturn 0; // 0 inseamna ca patrulaterul e oarecare;

}}

}07.12.2016 P.O.O. - limbajul C++ (laborator) 11

Page 12: Programare orientatăpe obiecte 8 C++ Clase imbricate Adrian … · 2016. 12. 7. · (clasa Cont_Bancar definită în interiorul clasei Client care conţine următoarele date: numărul

[email protected]

Lucrarea de laborator nr. 8

void Afisare_Patrulater(void){p1.Afisare_Punct();p2.Afisare_Punct();p3.Afisare_Punct();p4.Afisare_Punct();for(int i = 0; i < 4; i++)cout << "\nLatura " << (i+1) << " = " << laturi[i];cout<<endl;cout<<"diag1 = "<<diag1<<endl;cout<<"diag2 = "<<diag2<<endl;

}}; // sf. clasa Patrulater

07.12.2016 P.O.O. - limbajul C++ (laborator) 12

Page 13: Programare orientatăpe obiecte 8 C++ Clase imbricate Adrian … · 2016. 12. 7. · (clasa Cont_Bancar definită în interiorul clasei Client care conţine următoarele date: numărul

[email protected]

Lucrarea de laborator nr. 8

int main (void){

Patrulater::Punct p1 ( -4 , 0 );Patrulater::Punct p2 ( 0 , -2 );Patrulater::Punct p3 ( 4, 0 );Patrulater::Punct p4 ( 0 , 2 );Patrulater p (p1, p2, p3, p4);

07.12.2016 P.O.O. - limbajul C++ (laborator) 13

Page 14: Programare orientatăpe obiecte 8 C++ Clase imbricate Adrian … · 2016. 12. 7. · (clasa Cont_Bancar definită în interiorul clasei Client care conţine următoarele date: numărul

[email protected]

Lucrarea de laborator nr. 8switch (p.Tip_Patrulater())

{case -1 : cout << "\nCele 4 puncte NU pot forma un Patrulater !!!"; break;case 0 : cout << "\nPatrulaterul este OARECARE ! "; p.Afisare_Patrulater(); break;case 1 : cout << "\nPatrulaterul este PATRAT ! ";

cout <<"Aria Patratului este :"<< p.laturi[0]*p.laturi[1]<<endl; p.Afisare_Patrulater(); break;

case 2 : cout << "\nPatrulaterul este ROMB ! "; cout <<"Aria Rombului este :" <<(p.diag1*p.diag2)/2<<endl; p.Afisare_Patrulater(); break;

case 3 : cout << "\nPatrulaterul este PARALELOGRAM ! "; p.Afisare_Patrulater(); break;

case 4 : cout << "\nPatrulaterul este DREPTUNGHI ! "; cout <<"Aria Dreptunghiului este :"<< p.laturi[0]*p.laturi[1]<<endl; p.Afisare_Patrulater(); break;

};return 0;

}

07.12.2016 P.O.O. - limbajul C++ (laborator) 14

Page 15: Programare orientatăpe obiecte 8 C++ Clase imbricate Adrian … · 2016. 12. 7. · (clasa Cont_Bancar definită în interiorul clasei Client care conţine următoarele date: numărul

[email protected]

07.12.2016 P.O.O. - limbajul C++ (laborator) 15

Page 16: Programare orientatăpe obiecte 8 C++ Clase imbricate Adrian … · 2016. 12. 7. · (clasa Cont_Bancar definită în interiorul clasei Client care conţine următoarele date: numărul

[email protected]

Problema propusa spre rezolvare

2. Să se creeze o clasă Client, pentru gestionarea conturilor unei bănci, care să conţină următoarele date: numele, prenumele, numărul de telefon şi vârsta clientului, şi o dată de tip Cont_Bancar(clasa Cont_Bancar definită în interiorul clasei Client) care conţine următoarele date: numărul contului, suma depusă în lei, echivalentul sumei în euro, dobânda aferentă contului, suma la data actuală şi data deschiderii contului. Clasa Cont_Bancar are următoarele funcţii: o funcţie ce converteşte suma din lei în euro, o funcţie ce calculează suma totală (suma depusă + dobânda) în funcţie de data curentă şi de data depunerii sumei şi o funcţie de afişare a numărului contului şi a sumei aflate în cont în lei şi valută. Să se creeze trei obiecte de tip Client şi să se afişeze toate informaţiile referitoare la cei trei clienţi.07.12.2016 P.O.O. - limbajul C++ (laborator) 16

Page 17: Programare orientatăpe obiecte 8 C++ Clase imbricate Adrian … · 2016. 12. 7. · (clasa Cont_Bancar definită în interiorul clasei Client care conţine următoarele date: numărul

[email protected]

“First, solve the problem. Then, write the code.”

- John Johnson

07.12.2016 P.O.O. - limbajul C++ (laborator) 17


Recommended