Titlul: Ierarhie de clase Scris de: Adriana Maria din Martie 21, 2017, 15:42:53 Salut. Am o problema cu clase:
Sa se scrie un program C++ care tine evident cainilor intr-un cabinet veterniar. Sunt 2 categorii de caini: • Caini cu pete • Caini fara pete Subiecte urmarite: - Ierarhia de clase - Initializare membrilor Introduc atat cainii cu pete cat si cei fara pete intr-o lista. Trebuie sa fac o functie virtuala de afisare.Am facut asta,dar totusi am erori si nu pot afisa fiecare clasa derivata in parte.Ma puteti ajuta? #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include<stdio.h> #include<string.h> using namespace std; class lista; class caini { private: char nume[20], rasa[20]; int an; caini*urm; public: caini(char n[20], char r[20], int an1) { strcpy(nume, n); strcpy(rasa, r); an = an1; urm = NULL; } virtual void afisare() { cout << "----------------------\n"; cout << "nume: " << nume << endl; cout << "rasa: " << rasa << endl; cout << "an: " << an << endl; } friend class lista; }; class cu_pete :public caini { private: int np; public: cu_pete(char n[20], char r[20], int an1, int np1) :caini(n, r, an1) { np = np1; } void afisare() { caini::afisare(); cout << "nr pete: " << np << endl; } friend class lista; }; class fara_pete :public caini { private: char culoare[20]; public: fara_pete(char n[20], char r[20], int an1,char c[20]) :caini(n, r, an1) { strcpy(culoare, c); } void afisare() { caini::afisare(); cout << "culoare: " << culoare << endl; } friend class lista; }; class lista { public: caini*prim; void adaugare(caini*a); void an2(); }; void lista::adaugare(caini*a) { caini*p; p = prim; if (p) { if (strcmp(p->nume, a->nume)>0) { a->urm = prim; prim = a; } else { while (p->urm &&strcmp((p->urm)->nume, a->nume)<0) p = p->urm; a->urm = p->urm; p->urm = a; } } else prim = a; } void lista::an2() { caini*c; c = prim; while(c) { if (c->an == 2) c->afisare(); c=c->urm; cout << "-------"; } } void introdu(lista &l, int x) { caini*c; char nume[20]; char rasa[20]; int an; int np; char culoare[20]; cout << "Dati numele: "; cin >> nume; cout << "Dati rasa: "; cin >> rasa; cout << "Dati varsta: "; cin >> an; if (x == 0) { cu_pete*p; cout << "Dati nr pete: "; cin >> np; p = new cu_pete(nume, rasa, an, np); c = p; l.adaugare(c); } else if (x == 1) { fara_pete*f; cout << "Dati culoarea: "; cin >> culoare; f = new fara_pete(nume, rasa, an, culoare); c = f; l.adaugare(c); } } int main() { int o; lista l; l.prim = NULL; caini *a; cu_pete p; fara_pete f; do { cout << "1.Adauga caini cu pete\n"; cout << "2.Adauga caini fara pete\n"; cout << "3.Afisare caini cu pete\n"; cout << "4.Afisare caini fara pete\n"; cout << "5.varsta de 2 ani\n"; cout << "0.iesire\n"; cin >> o; switch (o) { case 1:introdu(l, 0); break; case 2:introdu(l, 1); break; case 3:a=&p; a->afisare(); break; case 4:a=&f; a->afisare(); break; case 5:l.an2(); break; } } while (o != 0); } |