Sunteți pe pagina 1din 4

Laborator mostenire

1. Scriei o aplicaie de tip Win32 Console Application care creaz trei clase denumite punct, segment i cerc. Un obiect aparinnd clasei punct va avea trei membri date : x i y. de tip int pentru pstrarea coordonatelor punctului i col de tip long pentru culoare. Clasele segment i cerc sunt derivate din punct. Un obiect aparinnd clasei segment motenete de la clasa punct membrii date x i y (coordonatele primului punct) i are n plus membrii dx i dy, tot de tip int, care definesc poziia celui de-al doilea punct fa de primul. Un obiect aparinnd clasei cerc motenete de la clasa punct membrii date x i y (coordonatele centrului) i are n plus membrul r tot de tip int. Pentru clasa punct scriei funciile : punct(int abs, int ord, long c) - constructor avnd trei parametri; ix(int a), iy(int a), icol(long a) - pentru modificarea valorii unuia dintre membrii date; dax(), day() dacol() - pentru recuperarea valorii unuia dintre membrii date; afiez() - pentru scrierea pe ecran a valorilor variabilelor x, y i col. deplas(int a, int b) - pentru translaia punctului cu incrementele a i b fa de poziia iniial : x = x + a; y = y + b; Scriei un program principal n care creai cteva obiecte aparinnd celor trei clase. Modificai apoi valorile iniiale ale parametrilor i reafiai valorile membrilor date. Apelai funcia deplas() pentru obiecte aparinnd claselor derivate i reafiai valorile membrilor date.
int main(int argc, char* argv[]) { punct p(10, 20, 12312), q(50, 200, 12312); p.afisez(); q.afisez(); segment s(10, 20, 1212, 30, 20); s.afisez(); cerc c(10, 20, 1212, 50); c.afisez(); c.deplas(1000, 1000); c.afisez(); return 0; }

Scriei o funcie membr a classei segment care calculeaz i imprim coordonatele absolute ale celui de-al doilea punct al unui segment.

Creeai i afiai o list simpl de obiecte grafice. Pentru rezolvarea problemei adugai proiectului clasa element definit astfel:
class element { public: element * urm; int tip; punct * p; void afisez(); element(punct *adr, int tp); element(); ~element(); };

Programul principal n noua versiune :


#include "segment.h" #include "cerc.h" #include "element.h" int main(int argc, char* argv[]) { punct p(10, 20, 12312), q(50, 200, 12312); segment s(10, 20, 1212, 30, 20); cerc c(10, 20, 1212, 50); c.deplas(1000, 1000); // Crearea listei element *adr; // Adresa primului element e adr element *elc; // Adresa elementului curent adr = new element(&s, 1); elc = adr; // Mai departe folosesc elc. // Adaug cercul elc->urm = new element(&c, 2); elc = elc->urm; // Adaug primul punct elc->urm = new element(&p, 0); elc = elc->urm; // Afisez lista // - vin pe primul element 8 elc = adr; while(elc) { elc->afisez(); elc = elc ->urm; } return 0; }

2. Problema avion Dorim s modelm printr-un program mai multe tipuri de avioane care formeaz flota aerian a unei ri. tim c ara dispune de avioane de cltori i de avioane de lupt. Avioanele de cltori sunt de mai multe tipuri, de exemplu: Boeing i Concorde. Avioanele de lupt pot fi, de exemplu: Mig-uri i TomCat-uri (F-14). Fiecare tip de avion va fi modelat

printr-o clas, iar avioanele propriu-zise vor fi instane ale claselor respective. Fiecare avion poate s execute o anumit gam de operaii i proceduri, dup cum se specific n cerinele de implementare. Se cere s se "construiasc" mai multe avioane de diferite tipuri i s se execute diferitele operaii disponibile pentru fiecare avion. Cerine/Sugestii de implementare: Fiecare avion trebuie s conin: - dou atribute: un identificator_avion de tip String i puterea motorului de tip ntreg i - dou metode, care s returneze valoarea identificatorului avionului i respectiv, valoarea puterii motorului avionului. Deoarece fiecare avion trebuie s poat decola, zbura i ateriza, este normal ca pentru fiecare obiect din program s putem apela metodele public void decolare(), public void zboara() i public void aterizeaza(). Aceste metode vor afia mesaje pe ecran. Avioanele de cltori i numai acestea trebuie s conin un membru numar_maxim_Pasageri de tip ntreg i o metod care s returneze valoarea acestui membru. Avioanele de lupt i numai acestea au posibilitatea de a lansa rachete asupra diferitelor inte, de aceea, pentru orice avion de lupt trebuie s putem apela o metod public void lansareRacheta(), care va produce afiarea unui text pe ecran. Avioanele de cltori de tip Concorde sunt supersonice, deci are sens s apelm pentru un obiect de acest tip metodele public void goSuperSonic() i public void goSubSonic() care vor produce pe ecran, de exemplu: "Mod Supersonic activat" i respectiv: "Mod Supersonic dezactivat". Avioanele Mig i numai acestea au geometrie variabil pentru zbor de mare vitez, respectiv pentru zbor normal. Clasa corespunztoare trebuie s conin metodele public void geometrieVitezaMare() i public void geometrieZborNormal() care vor produce pe ecran afiarea unor texte (mesaje) corespunztoare. Avioanele TomCat i numai acestea au posibilitatea de realimentare n zbor, deci pentru astfel de avioane are sens s apelm o metod public void realimentare(), care va produce pe ecran un text. Fiecare din metodele de mai sus trebuie s afieze identificatorul avionului pentru care a fost apelat.

Se va ncerca implementarea unei ierarhii de clase folosind relaia de motenire, deoarece din cerine rezult c o parte din funcionalitate este comun tuturor avioanelor, n timp ce o alt parte este specific doar avioanelor de un anumit tip. Alegei clasele care trebuie s apar pe nivelele superioare ale ierarhiei i gsii o modalitate potrivit de a mpri metodele disponibile ntre clasele aplicaiei, n aa fel nct s beneficiai de avantajele reutilizrii codului pe care le ofer relaia de motenire. 3. Sa se implementeze ierarhia de clase din figura alaturata, cu membrii pe care ii considerati necesari.

4. Sa se defineasca o clasa coada care sa permita adaugarea si listarea elementelor. Sa se defineasca o noua clasa lista care sa permita si inserarea si stergerea unui element. Sa se concateneze 2 liste (se va supraincarca operatorul +). Sa se defineasca o noua clasa, lista_circulara, care sa mosteneasca clasa lista si care sa treaca o lista liniara in lista circulara si afiseaza o lista circulara.

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