Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

C


Index » educatie » » informatica » C
Constructorul de copiere


Constructorul de copiere


Constructorul de copiere

Constructorul de copiere este un constructor special, folosit pentru a crea un nou obiect, copie a unui obiect existent. Acest constructor are un singur argument - o referinta catre obiectul ce va fi copiat. Compilatorul genereaza implicit constructorul de copiere pentru orice clasa definita de noi. Constructorul de copiere implicit copie fiecare membru a obiectului parametru in membrul corespunzator a obiectului de initializat.    De exemplu, pentru clasa Dreptunghi din exemplele noastre, compilatorul va genera un constructor de copiere echivalent cu urmatorul:

Dreptunghi::Dreptunghi(Dreptunghi &sursa)



Constructorul de copiere are un rol special in C++. El este apelat automat in urmatoarele situatii:

La declararea unui obiect, initializat dintr-un alt obiect. Exemplu:

Dreptunghi x(3,4); // constructorul este folosit pentru a crea x

Dreptunghi y(x); // constructorul de copiere este folosit pentru a crea y

Dreptunghi z = x; // constructorul de copiere este folosit pentru initializare in

// declaratie

z = x; // Operatorul de atribuire (=), nu se apeleaza constructori

Un parametru valoare este initializat din argumentul corespunzator:

f(x);    // constructorul de copiere initializeaza parametrul valoare de

// tip clasa.

Un obiect este returnat de o functie.

In total, exista 3 membri generati de compilator in mod implicit:

Constructorul fara parametri.

Constructorul de copiere.

Operatorul de atribuire.

Oricare dintre acesti membri pot fi suprascrisi in caz de nevoie.

Exercitii

Implementati o clasa Complex care sa incapsuleze lucrul cu numere complexe. Supraincarcati operatorii:

-

! - modulul numarului complex

Scrieti un program care citeste de la tastatura 2 numere complexe, si returneaza rezultatul celor 4 operatori aplicati asupra numerelor.

Completati clasa Multime din laboratorul 3, problema 1,    cu urmatorii membri:

Operatorul cu parametru int - adauga un element la multime, echivalent cu functia Multime adauga()

Operatorul cu parametru int - extrage un element din multime, echivalent cu functia Multime extrage()

Operatorul . Atentie la datele alocate dinamic.



Constructorul de copiere.

Operatorul cu parametru Multime. Va adauga la multimea curenta elementele multimii primite ca parametru. Practic, dupa aceasta operatie multimea curenta va deveni reuniunea dintre cele 2 multimi operanzi. Va fi utilizat intr-o expresie de genul a+=b

Operatorul cu parametru Multime. Va realiza reuniunea dintre cele 2 multimi operanzi. Spre deosebire de operatorul , multimea reuniune va fi un obiect nou, returnat de functia operator. Multimile operanzi nu vor fi modificate. Se va utiliza intr-o expresie de genul a=b+c

Realizati un program care testeaza toti acesti operatori.

Implementati o clasa String care sa reprezinte un sir de caractere si operatiile aferente. Definiti urmatorii membri:

Operatorul    + , concatenarea sirurilor.

Operatorul =

Operatorul = =

Metoda

int find(String subsir)

Realizeaza cautarea unui subsir intr-un sir. Returneaza prima pozitie in sirul curent, in care a fost gasit sirul subsir Sau daca subsirul nu a fost gasit. De exemplu

sir.find(subsir) va returna 3, daca sir reprezinta "alabala" iar subsir "ba"

Metoda

void print()

Afiseaza sirul.

Metoda

int compare(String sir2)

Realizeaza compararea a 2 siruri in ordine lexicografica. Returneaza -1 daca sirul curent (this) este mai mic decit sir2, 0 daca sirurile sunt egale, si 1 daca sirul curent este mai mare.

Constructorul vid - creaza un sir vid.

Constructorul cu argumnt un sir de caractere (char *

Constructorul de copiere.

Destructorul.








Politica de confidentialitate




Copyright © 2023 - Toate drepturile rezervate