Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Mostenirea

c


Mostenirea

Mostenirea este un concept al programarii cu obiecte. Mostenirea ne permite sa cream clase care sunt derivate din alte clase existente, astfel incat ele includ unii dintre membri claselor parinte, variabile si functii. Clasa derivata mosteneste membrii clasei parinte, functii si variabile. In acest fel putem construi programe complexe din obiecte simple. Clasa care este mostenita se numeste clasa de baza sau superclasa, iar clasele care mostenesc se numesc clase derivate sau subclase. Clasa de baza contine caracteristicile comune ale mai multor elemente. Clasele care mostenesc sunt clase particulare ce adauga doar elementele proprii. Cu ajutor 949c22j ul mostenirii reutilizam clase deja construite.



Diagrama sintactica a definirii unei clase derivate este

class nume_clasa_derivata : acces nume_clasa_baza

;

In aceasta definitie cuvantul cheie acces poate fi public, protected sau private.

O clasa derivata mosteneste toti membri clasei de baza exceptand constructorii, destructorul si operatorul =. Desi constructorii nu sunt mosteniti, constructorul implicit si destructorul clasei de baza sunt totdeauna apelati cand un obiect de tipul clasei derivate este creat sau distrus. In constructorul clasei derivate se apeleaza la inceput constructorul implicit al clasei de baza. Daca este nevoie, putem apela explicit un constructor al clasei de baza pentru initializarea variabilelor. Apelarea sa se face astfel

constructor_clasa_derivata(lista de parametri) : constructor_clasa_de_baza (lista de parametri)

Problema 1. Se va defini o clasa Base ce contine doua numere intregi x, y si o functie care sa afiseze aceste numere. Programul ce rezolva problema este urmatorul.

class Base

;

Se va defini o clasa Pixel ce descrie un pixel pe ecran si mosteneste clasa Base. Un pixel este caracterizat de coordonatele punctului (care sunt cele din clasa Base) si culoare ce va fi o variabila de tip intreg din clasa Pixel.

class Pixel : public Base

;

Se va defini o functie globala ce va descrie un pixel translat cu valorile dx, dy, cu prototipul :

translate(Pixel&, int dx, int dy);

Coordonatele noului punct sunt x + dx si y + dy.

#include<iostream.h>

class Base

Base(int x1, int y1) ;

void print();

class Pixel: public Base

Pixel() : Base();

friend void translate(Pixel &p,int dx,int dy);

void printp();

void translate(Pixel &p,int dx,int dy)

void main()

Rezultatele rularii programului sunt cele de mai jos.

Mentionam ca am definit variabilele clasei de baza h si b de tipul protected.

Datele si functiile declarate protected in clasa de baza pot fi utilizate in clasele derivate, dar nu pot fi utilizate de obiecte.

Datele si functiile declarate private in clasa de baza nu pot fi utilizate in clasele derivate sau de obiecte de tipul claselor derivate.

Tabela de mai jos sumarizeaza accesului la variabilele unui obiect in functie de specificatorii lor.

specificatorul de acces al variabilei

public

protected

private

Membri ai aceleiasi clase

da

da

da

Membrii claselor derivate

da

da

nu

Nemembri

da

nu

nu

Problema 2. Sa se defineasca o clasa Ratio ce descrie numere rationale ce mosteneste din clasa Base. Numaratorul si numitorul numarului rational vor fi variabilele x si y din clasa Base. Programul ce rezolva problema este urmatorul.

class Ratio : public Base

Se vor defini functii globale care sa adune si sa scada numere rationale cu prototipurile

Ratio add(Ratio&, Ratio&);

Ratio sub(Ratio&, Ratio&);

Ratio mul(Ratio&, Ratio&);



Fie numerele intregi a = 2 / 5, b = 3 / 7, c = - 4 / 3, d = -1 / 1. Se vor calcula expresiile a + b, a + b * c, (a + b) / (a + d). Programul ce rezolva problema este urmatorul.

#include<iostream.h>

class Base

;

Base(int x1, int y1) ;

void print();

class Ratio : public Base

;

// se va observa modul    de apel al constructorului din clasa

// de baza in clasa derivata

Ratio(int x1, int y1): Base(x1,y1);

friend Ratio add(Ratio a, Ratio b);

friend Ratio sub(Ratio a, Ratio b);

friend Ratio mul(Ratio a, Ratio b);

friend Ratio div(Ratio a, Ratio b);

};

Ratio add(Ratio a, Ratio b)

Ratio sub(Ratio a, Ratio b)

Ratio mul(Ratio a, Ratio b)

Ratio div(Ratio a, Ratio b)

void main()

Rezultatele rularii programului sunt cele de mai jos.

Problema 3. Sa se defineasca o clasa de baza numita Persoana ce contine un camp nume cu numele persoanei si o functie print() ce afisaza numele. Functia print() va fi virtuala. Programul ce rezolva problema este urmatorul.

class Persoana

virtual void print()

};

Sa se defineasca o clasa numita Angajat ce mosteneste clasa Persoana. Clasa va contine un camp cu numele departamentului si o functie print() ce va afisa numele angajatului si numele departamentului. Definitia clasei este cea de mai jos.

class Angajat : public Persoana

void print()

};

Sa se defineasca o clasa numita Manager ce mosteneste clasa Angajat. Clasa va contine un camp cu pozitia managerului si o functie print() ce va afisa numele, departamentul si pozitia managerului. Definitia clasei este cea de mai jos.

class Manager : public Angajat

void print()

};

Se vor crea obiecte cu angajati si manageri si se vor afisa datele acestora (numele, departamentul si pozitia manageriala). Programul de rezolvare a problemei este prezentat mai jos.

#include<iostream.h>

#include<string.h>

class Persoana

virtual void print()

};

class Angajat : public Persoana

void print()

};

class Manager : public Angajat

void print()

};

int main()

Rezultatele rularii programului sunt cele de mai jos.

Probleme propuse

Sa se defineasca o clasa Baza care contine doua variabile de tip double cu specificatorul de acces protected. Clasa va defini un constructor cu parametri si un constructor implicit, fara parametri. Se va defini o clasa Complex ce va implementa numere complexe. Clasa Complex va mosteni clasa Baza si va defini un constructor cu parametri, un constructor implicit fara parametri, o functie care prescrie valorile partiilor reala si imaginara a numarului complex si o functie care scrie pe ecran numarul complex sub forma

(partea reala, partea imaginara)

Se va defini o functie globala care sa adune douǎ numere complexe.





Document Info


Accesari: 1091
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2025 )