Documente Academic
Documente Profesional
Documente Cultură
2017
Spre deosebire de limbajele orientate pe obiect C++ permite controlul accesului la
membrii claselor în acest scop sau creat 3 specificatori de control al accesului:
PUBLIC -membrul poate fi accesat de orice funcție din domeniul declarație
clasei (nu are restricții )
PRIVATE-Membrului este accesibil numai funcțiilor membre și prietene ale
clasei.
PROTECTED- Similar cu private,însă accesul se extinde și la funcțiile
membre și prietene ale claselor derivate.
Este de remarcat faptul că o funcție membre a unei clase are acces la toți membrii
clasei indiferent de specificatorul de acces.
Asa dar sintaxa de declarație unei clase derivate incluzind controlul accesului
este:
Class Nume clasa derivată :Specificatorul de acces ,Nume clasa de bază.
Ex class Persoane
{char nume [10];
Char prenume[10];
Int virsta;
}
Class Elev: public Persoană
{ void afișare (int,persoana [])
}
Observăm Pentru a oferi clasei derivate acces la.un membru al clasei de bază,acesta trebuie declarat
protected sau public pentru respectarea principiului incapsularii datelor pentru respectarea principiului
incapsularii datelor datele membre pentru care se oferă acces claselor derivate se declara in clase de
bază cu atributul Protected..
De asemenea pentru a observa dreptul de acces în urma derivarii se utilizează derivarea public .
Accesul poate fi stopat pe orice nivel ar erahiei de clase printr-o derivare Private.
Class Point
{protected:
Unsigned x,y;
Public:
Point ()
~Point ();
{unsigned color;
Public:
};
Observăm ca variabile membru sunt declarate Protected astfel incit vor fi vizibile și vor avea același
atribut în clasa Graphic Point deși nu sunt utilizate în mod normal X si Y ar trebui sa fie declarați Private
întru cit nu sunt utilizați decit în interiorul clasei Point.
Funcțiile din Graphic Point nu accesează acești 2 membri direct ci prin intermediul metodelor publice de
accesare a lor oferite de clasa Point .
De notat este faptul că implicit dacă nu este utilizat nici un specificator de acces membrii sunt Private.
Accesul la datele membre publice sau apelul funcțiilor membre publice ale unui obiect se poate face
folosind un operator de selecție membru:operatorul . Dacă se cunoaște obiectul sau operatorul – dacă
se cunoaște pointerul la obiect
Public:
};
Class B
{private :
Int x;
Public :
Friend class A
};
Ab.x+=y;
A a;
B b;
a.setY (10);
b.setX (7);
a.suma (b);
01.02.2017
Avantajul constă în creșterea vitezei de execuție a codului.Fiind evitate operațiile aferente apelului de
funcție.
Dezavantaj-Crește dimensiunea codului sursă. Din punct de vedere sintactic definiția unei funcții
INLINE este similară cu cea a funcției uzuale,doar este precedată de cuvintul cheie INLINE.
CODUL :
Main ()
{….
Max (5,7);
#include <iostream>
{return 2×target;
Int main ()
{int target;
Cin>>target;
Cout <<»/n»;
Target =double (target);
Cout <<»target»<<target<<endl;
Return 0; {
OBSERVAT:
Funcțiile inline combin ăavantajele macrourilor cu cele ale funcțiilor în acest caz se elimină operațiile
aferente apelului. Păstrează toate proprietățile funcțiilor referitor la validitatea apelului ,transferur
parametrilor,declarații.
Constructorii in C++
Constructorii sunt metode speciale ale clasei care au caracteristici speciale pe se folosesc la.crearea si
inițializarea unei clase .
Sunt apelați de fiecare data când se creaza noi instanțe ale clasei(automat la crearea fiecărui obiect al
clasei).
Dacă nu este specificat nici un constructor compilatorul generează automat unu implicit fără parametrii .
#include <iostream>;
Class line
{public :
Void setlonght (double len){lenght=len,}
Line ();//constructor
Private:
Double lenght;
};
Line ::line(void)
Int main ()
{Line line;
Line setlength(6.2);
Distructorii în C++
Daca în cadrul clasei nu este explicit declarat un destructor, compilatorul generează automat unu
implicit.
08.02.2017
Tema:Operatorul THIS(pointerul THIS)
La crearea instanței se creează un pointer special denumit THIS.
this conține adresa instanței curente a obiectului.
Pointerul THIS este deosebit față de alți pointeri valoarea sa se modifică la fiecare nouă apelare a
instanței.
Program:
#include <iostream>
Class A {
Private:
Int a;
Int b;
Public:
{ a=x ; b=y;
Int produs_this(int,int)
Int produs ()
Main ()
{A obj;
Int x,y;
Obj.gets (x,y);
Obj.produs_this (x,y);
Obj.produs ();
#include <iostream>
Class Suma {
Private:
Int x;
Int y;
Public:
{cout<<''Sum of 2 doubles:''<<x+y;}
Main ()
{Sum.Obj;
Obj.Suma (3,4);
Obj.Suma (2.5,1.5);
ALT PROGRAM :
#include <iostream>
{cout<<''Sum of 2 doubles:''<<x+y;}
Main ()
{
Suma (3,4);
Suma (2.15,1.5);
Supraîncărcarea operatorilor
Acasa: Creați un program care va utiliza supraîncărcarea operatorilor. Citiți 2 vectori cu un constructor
în clasa de bază, executați următoarele operații :
B:Diferenta a 2 vectori.
C:Produsul a 2 vectori.
E:++Postfixat incrementat .
F:Postfixat decrimentat.
J:>>Operator de citire.
Supraîncărcarea Funcțiilor.
Cea mai puternică facilitate introdusăde limbajul C++ referitor la funcții constă în posibilitatea de
supraîncărcare a funcțiilor. Supraîncărcarea oferă programatorului mai multe funcții cu același nume dar
care diferă prin numărul și bară sau tipul parametrul .
Programul:
Main ()
{
Cout <<functiamea (10)<<>>;
Return 0;
Double functiamea(double i)
{ return i;
{ return i;
Programul NR 2:
Main ()
Return 0;}
{return 0;}
{return i*j;}
Text:
Probabil cel mai frecvent caz de ambiguitate apare apare din cauza funcție sqrt().
Un apel de tip:
Int x
Destructorii
Program:
Class A
Public:
A ();//constructor;
~A () ;//destructor;
};
A::A ()
A::~A ()
{A ob.obr;
};
#include <stdioh>
Class Vector
{Public :
Int n,i;
Vector();
Void operator+(vector);
Void operator-(Vector);
~Vector ();
};
Vector::Vector ()
Cin>>n;
15.02.2017
#include <iostream>
Class Supra
Public:
Int num;
Supra ();
Supra (int);
Supra operator+(Supra);
Void display;
Supra::Supra (){ }
Supra::supra (int a)
Num=a;}
{ Supra obj;
Obj.num=num+b.num;
} return (obj)
Void Supra::Display ()
Int main ()
Z=x+y
Z.display ();
Utilizați o clasă vector care va inițializa printrun constructor elementele a doi vectori tablou
unidimensional.
Implimentati operatorul de adunare (+) scădere(-) produs (×) produs scalar (×=) implimentarea (++)
deplimentarea (--).
Program:Adunarea
#include <iostream>
{ public:
Int a [10];
Int i,n;
();
~vector ();
Void operator+(vector);
};
Vector::vector ()
Cin>>n;
Cin>a [i];
Cout <endl;
Vector::~vector ()
{}
Cout <<endl;
Main ()
{ vector v1,v2;
v1+v2;//+
… //-,*,*=
Program:Înmulțirea
#include <iostream>
{ public:
Int a [10];
Int i,n;
();
~vector ();
Void operator+(vector);
};
Vector::vector ()
Cin>>n;
Cin>a [i];
Cout <endl;
Vector::~vector ()
{}
Cout <<endl;
Main ()
{ vector v1,v2;
v1×v2;//+
… //-,*,*=
Program:Produs scalar
#include <iostream>
{ public:
Int a [10];
Int i,n;
();
~vector ();
Void operator+(vector);
};
Vector::vector ()
Cin>>n;
Cin>a [i];
Cout <endl;
Vector::~vector ()
{}
Int p=0;
Main ()
{ vector v1,v2;
v1×v2;//+
… //-,*,*=
}
POO TEORIE
Limbajul C++ permite operatorului sa facă diferite operații cu obiecte ale claselor folosind simbolurile
operatorilor standart.
Un tip clasă se poate defini împreună cu un set de operatori asociați obținut prin supraîncărcare
(overloading ) operatorilor existenți.
De rezoluție-::
Pointer-*
Operatorul condiției-:?
Size of- mărimea tipului de date.
.-operatorul punct.
Funcții membru
Funcții prietene (Friend).
Sintaxa :
Class IDClasa
};
Add operator+(Add)
Moștenirea reprezinta unul din principele fundamentale moștenirea reprezintă unul din principiile
fundamentale ale POO care dintrun concept general sa obținem unul particular (mai specializata ) .
Moștenirea reprezintă mecanismul prin care o clasă preia structura( datele membre.) Si
comportamentul (metodele ) unei altei clase la care adaugă elementele specifice.
Moștenirea reprezintă procesul prin care o clasă derivată moștenește toate datele si funcțiile membre
ale unei clase numită clasa de bază.
Clasa de bază se mai numește (Părinte.Casa Părinte sau Super Clasa). Clasa de la care se preia structura
si comportamentul .
Clasa se diferențiază de clasa de bază prin adăugarea unor membri (Date sau funcții )..Sau prin
supraîncărcarea funcțiilor membre al clasei de bază.
Utilizând derivatele claselor dezvoltarea aplicațiilor devin mai eficiente .
1.O parte de cod este deja scrisă și va fi moștenită .
2. Codul Moștenit deja este testat, deci exista o garanție a corectitudinii acestuia.
Derivarea unei clase dintro clasă de bază .
};
Public
Protected
Privat
Exemplu:
{into
Void output ()
};
Ce moștenim în principiu fiecare dată sau funcție membru a clasei de bază e moștenește în clasă
derivată
Există și excepții :
Constructori și destructorii.
Supraîncărcarea operatorului =
Prietenilor(datele din clasele friends ).
Class mother
{public:
Void SayName();
};
Void Mother ::sayname ()
{ public :
}; int main ()
{ Mother mom;
Mom.Sayname ()
Doughter tina;
Tina.sayName ();
Tina.f2 ();
А 2Exemplu:
01.23.2017
1-Se da o clasă de bază poligon care conține lungimea și lățimea de tip întreg cu specificatorul
PROTECTED.
Clasa dreptunghi deriva din clasa poligon și conține metoda ariei -calculează aria dreptunghiului.
Clasa triunghi derivă din clasa poligon și conține metoda ariei -Calculează aria tringhiului. Asigurați
corect incapsulara și moștenirea simplă.
2-Inplimentati o erahi de clase ce reprezintă diferite figuri geometrice din plan. Utilizați moștenirea
multiplă.
PE ACASA: Implimentati erarhia de clase telefon, fix , telefon,mobil utilizați moștenirea multiplă
(Asigurăm incapsulara ).
01.03.2017
Atunci cind moșteniți o întreagă clasă ca Protected in sintaxa de moștenire toți membrii publici și
protejați ai clasei de bază devin membrii protejați ai clasei derivate.
Deci are loc transformarea tuturor membrilor clasei baze în membrii privați în cadrul clasei derivate .
PROGRAM 1:
#INCLUDE
Class Baza
{protected :
Int a,b;
Public :
A=x;
B=y;
Void Show ()
{Private :
Int k;
Public:
Void setk ()
{Set (2,3);
K=a*b;
Void showK ()
Cout <<''K=''<<endl;
};
Int main ()
Deriv_1 obj;
Obj.setk ();
Obj.showk ();
PROGRAM2:
#include <iostream>
Class Baza
{protected :
Int b;
Public :
Baza ()
};
{protected:
Int c;
Public :
Deriv_1 ()
};
Main ()
{Deriv_1 d;
Dacă constructorii clasei derivate nu apelează explicit constructor uneia din clasele de bază atunci
compilatorul va fi apelat automat de constructorul implicit ai clasei de bază.
Program 3 :
Class Baza
{protected:
Int b;
Public:
Baza ()
};
Class Deriv_1
{public:
Deriv_1
{public :
Deriv_1 ()
{cout<<''Apel Deriv_1''<<endl;
};
{public :
Deriv_2 ()
Main ()
{Deriv_2 d;
Class Baza
{Baz ();
Clasa Deriv_1
{de}
Class Baza
{ protected :
Int b;
Public:
Baza ()
Class Baza
{public:
Baza ();
};
Clasa Deriv_1
{public:
Deriv ()
};
{Deriv_2 ();
};
Main ()
La distrugerea unui obiect al clasei derivate compilatorul va executa mai întîi destructorul clasei derivate
și apoi destructorii claselor de bază în ordinea inversă a apelului constructorilor
Program4:
Class Baza
{public:
~Baza ()
};
Class Deriv_1
{public:
~Deriv_1
};
{public:
~Deriv_2 ()
};
Main ()
{Deriv_2 d2;
Va afișa :
Destructor Der2
… Der1
… Bază
Cu toate ca constructorii și distructorii ai clasei de bază nu sunt însăși moșteniți, constructorul implicit
(fara parametrii ) și distructor său sunt întotdeauna apelate atunci cind un nou obiect al unei clase
derivate este creată sau distrusă.
Program 5:
#include <iostream>
{public:
Mother ()
Mother (int a)
};
};
{public :
};
Int main ()
15.03.2017
Tema:Polimorfismul
Poliorfismul reprezintă un alt principiu fundamental al POO.
În C++ apelul unei funcții membre Va avea un efect diferit în funcție de obiectul care invoca funcția
(Funcția apelata este selectată în funcție de tipul obiectului ) .
Polimorfism este capacitatea unor entități de a lua forme diferite. El include referințe pointeri impliciti
clase abstracte funcții virtuale funcții virtuale pure.
Poliorfismul parametric :
Reprezintă mecanismul prin care putem defini o metodă cu același nume în aceiași clasă funcții care
trebuie sa difere prin numărul și \Sau tipul parametrului. Selecția funcției se realizează la compilare
(early binding)
Programul :
#include <iostream>
Usingnamespace std;
Class Suma
{
Public:
Int x,y,z;
Public:
{return (x+y)};
{return (x+y+z);}
};
Main ()
{Suma obj;
Int a=2;b=3;c=4;
Polimorfismul de moștenire :
Mecanismul prin care o metodă din clasa de bază este redefinită cu aceiași parametri în clasele derivate.
Selecția funcției se va realiza la rulare (late biding ,dynamic biding, runtime biding) Upcasting conversia
obiectelor claselor derivate către obiecte ale claselor de bază
Program :
#include <iostream>
#include <string.h>
Class Animal {
Protected:
Public:
Animal (char*nume )
{strcpy (this->nume,nume);}
Char *sunet ()
Char get*getNume ()
{return nume;} };
Class pisica:public Animal {
Public :
Char*sunet ()
{return ''Miau!'';} };
Public:
Char*sunet ()
{return ''Ham!!'';}
};
Int main ()
Raspuns:
Jerry:''Nu stiu'' ;
Tom:''Miau'';
Azorel:''Ham'';
Tom:''Nu știu'';
Țoti vor avea în comun o funcție de atac totuși fiecare atac al fiecărui individ diferă.
Ninare lovitura sa de atac ,Monștrii al lor chiar daca au in comun un atribut (atacul) acesta lucrează
diferit pentru fiecare.
PPolimorfismul Îți permite sa creezi accea și funcție, in cazul nostru atacul asupra mai multor obiecte si
deoarece toate personajele sunt inamici ei deriva din aceiași clasa.
Deci Polimorfismul Îți permite sa utilizezi aceiasi funcție dar rezultatele sa se difere.
Program:
#include <iostream>
Clase enemy {
Protected:
Int attackpower;
Public :
{attackPower=a;
{classNinja:PublicEnemy {
Public:
Void attack ()
};
Public:
Void attack()
};
Intmain {
Ninja n;
Monster m;
Enemy*enemy1=&n;
Enemy*enemy2=&n;
Enemy->setAttackPower(29);
Enemy->setAttackPower(40);
n.attack ();
m.attack ();
Răspuns :
I am,Ninja chap,-29