Sunteți pe pagina 1din 18

Programare II

Programare Orientată Obiect


Curs 8
Curs anterior
• Moştenire
• Clase derivate
• Modificatori de acces
• Constructori şi destructori
• Supraîncărcarea operatoriilor
• Supradefinirea funcţiilor
• Funcţii virtuale
• Destructori virtuali
• Polimorfism
Curs curent
• Moştenire

• Funcţii pur virtuale

• Clase abstracte

• Moştenire multiplă

• Clase de bază virtuale

• RTTI
Moştenire (inheritance)
• Definiţie
▫ Moştenirea este un mecanism care permite unei clase A să
moştenească atribute şi metode ale unei clase B. În acest caz
obiectele clasei A au acces la membrii clasei B fără a fi nevoie să
le redefinim
• Terminologie
▫ Clasă de bază
Clasa care este moştenită
▫ Clasă derivată
O clasă specializată a clasei de bază
▫ Relaţia „kind-of” nivel de clasă
Triunghiul este un tip (kind-of) Poligon
▫ Relaţia „is-a” nivel de obiect
Obiectul triungiRosu este un (is-a) Poligon
Mostenire. Funcţii virtuale
• Moștenire sintaxă
class NumeleClaseiDerivate : modificatorDeAccess NumeleClaseiDeBază
unde
modificatorDeAcces specifică tipul derivării
 private (valoare implicită)
 protected
 public

• Funcţii virtuale sintaxă


▫ virual prototipFuncţie;

▫ Cîteva caracteristici

 Este un tip special de funcţie care determină tipul derivat corespunzător pentru o funcţie cu acelasi prototip

 Specificarea cuvântului „virtual” în faţa funcţiei

 Sunt funcţii membre nestatice

 Redefinirea şi redeclararea funcţiilor virtuale în clasele derivate nu este obligatorie


FUNCŢII PUR VIRTUALE
• Definiţie

▫ Sunt funcţii care sunt declarate virtuale, dar nu sunt


implementate în clasa de bază

• Trebuie să fie suprascrise în toate clasele derivate, altfel


rămân pur virtuale

• Sintaxă

▫ virtual tipDeReturn numeFunctie (listaDeParametri) = 0;


CLASE ABSTRACTE
• Definiţie
▫ Dacă o clasă conţine o funcţie pur virtuală ea se
numeşte abstractă

• Clasele abstracte nu pot fi instanţiate

• Se pot utiliza pointeri la clasele virtuale

• Utile în cazul polimorfismului


CLASE ABSTRACTE. Exemplu
Funcții pur virtuale
class A { nt main () {
=> clasă abstractă
public: A * ap = new C;
virtual void x() = 0;
virtual void y() = 0; ap->x ();
}; ap->y ();
delete ap;
class B : public A { return 0;
public:
}; funcția virtuală x()
Implementează doar
virtual void x(); => clasă abstractă
};

class C : public B { Implementează funcțiile virtuale x() și y()


public: => clasă instanțiabilă
virtual void y();
};
TIPURI DE MOŞTENIRE ÎN C++
• Moștenire simplă

• Moștenire multiplă
MOŞTENIRE MULTIPLĂ
• Definiţie
▫ Moştenirea este multiplă dacă o clasă are două sau mai multe clase de
bază

• Sintaxă
▫ class ClasaDerivată : [modificatorDeAcces] ClasaDeBaza1,
[modificatorDeAcces] ClasaDeBaza2,

[modificatorDeAcces] ClasaDeBazaN {
};

• Creşte flexibilitatea ierarhilor de clase → ierarhii în formă de graf


MOŞTENIRE MULTIPLĂ. EXEMPLU
class Mamifer {

};

class AnimalInaripat {

};

class Liliac: public Mamifer, protected AnimalInaripat {



Liliac(…):AnimalInaripat(…), Mamifer(…) {

}

};
MOŞTENIRE MULTIPLĂ. EXEMPLU
class Animal { int main(){
int varsta;
Liliac l;

};
l.varsta; //eroare accesare
class Mamifer: public Animal { ambiguă l.Manifer::varsta=7;
… l.AnimalInaripat=10;
}; }
class AnimalInaripat: public Animal {

};
class Liliac: public Mamifer, protected
AnimalInaripat {

};
MOŞTENIRE MULTIPLĂ. EXEMPLU
• Problema: o instanţă a clasei de bază Animal
este inclusă de două ori clasa derivată Liliac (una
de la clasa Mamifer şi una de la clasa
AnimalÎnaripat), ceea ce duce la:

▫ Pierderi la alocarea spaţiului de memorie (toate


atributele sunt duplicate)

▫ Ambiguităţi: probleme de accesare a membrilor


clasei Animal
CLASE DE BAZĂ VIRTUALE
• Definiţie
▫ Dacă o clasă de bază este declarată ca şi clasă de
bază virtuală, atunci într-o ierarhie de tip diamant
clasa de bază este instanţiată o singură dată

• Sintaxă
class clasaDerivată : [modificatorDeAcces] virtual
clasaDerivata {

}
CLASE DE BAZĂ VIRTUALE
class Animal { … }; • Constructorul clasei de
bază trebuie apelat
class Mamifer: public virtual Animal { … }; explicit
• Paşi pentru iniţializarea
class AnimalInaripat: public virtual Animal { … };
unui obiect:
class Liliac: public Mamifer, protected AnimalInaripat ▫ Apelează constructorul
{ clasei de bază virtuale
Liliac(…):Animal(…), Manifer(…), AnimalInaripat(…) ▫ Apelează constructorii
{ claselor de bază în
……. ordinea declarări lor
} ▫ Iniţializarea
… membrilor clasei
}; derivate
----------
▫ Iniţializarea obiectului
Liliac l;
derivat
l.varsta;
RUNTIME TYPE INFORMATION - RTTI
• Este o facilitate a limbajului care permite identificarea
tipului variabilelor la execuţie

• Pentru a funcţiona clasele trebuie să fie polimorfice, să


conţină cel puţin o funcţie virtuală

• Include
▫ dynamic_cast<>
▫ typeid

• Incluse in biblioteca typeinfo


▫ #include <typeinfo>
RTTI – DYNAMIC CAST
class Animal {
virtual ~Animal();
};
class Mamifer : public Animal {
virtual ~Mamifer();
};

int main() {
Animal a;
Mamifer m;
Animal *pa =&m;
if (dynamic_cast<Mamifer*> (pa) != 0) {
Mamifer *pm = (dynamic_cast<Mamifer*> (pa) ;
Mamifer *p1=(Mamifer*)pa;
}
}
CURS VIITOR
• Şabloane

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

  • Java Basics
    Java Basics
    Document123 pagini
    Java Basics
    Alexandru Ionescu
    Încă nu există evaluări
  • Fire de Executie in Python
    Fire de Executie in Python
    Document13 pagini
    Fire de Executie in Python
    Marius Ionescu
    Încă nu există evaluări
  • Introducere in Java
    Introducere in Java
    Document39 pagini
    Introducere in Java
    Ovidiul
    Încă nu există evaluări
  • Java Curs
    Java Curs
    Document20 pagini
    Java Curs
    Alexandra-Elena Ciuhat
    Încă nu există evaluări
  • Paw Id
    Paw Id
    Document47 pagini
    Paw Id
    ramonet
    Încă nu există evaluări
  • Toate Grilele
    Toate Grilele
    Document66 pagini
    Toate Grilele
    Eduard Marin
    100% (1)
  • POO - C++ - Indrumar Laborator
    POO - C++ - Indrumar Laborator
    Document49 pagini
    POO - C++ - Indrumar Laborator
    livius969
    Încă nu există evaluări
  • Intrebari Raspunsuri PCLP Examen 2020
    Intrebari Raspunsuri PCLP Examen 2020
    Document14 pagini
    Intrebari Raspunsuri PCLP Examen 2020
    Cosmin Mihail
    Încă nu există evaluări
  • POO Curs 03 2023
    POO Curs 03 2023
    Document31 pagini
    POO Curs 03 2023
    evelyne
    Încă nu există evaluări
  • Curs 2
    Curs 2
    Document58 pagini
    Curs 2
    Daniel Popa
    Încă nu există evaluări
  • Curs3 POOJava
    Curs3 POOJava
    Document37 pagini
    Curs3 POOJava
    Georgiana Izabela Dinu
    Încă nu există evaluări
  • 10 - Tipuri de Clase
    10 - Tipuri de Clase
    Document6 pagini
    10 - Tipuri de Clase
    Данилов Алина
    Încă nu există evaluări
  • Curs 06 - Mostenire
    Curs 06 - Mostenire
    Document6 pagini
    Curs 06 - Mostenire
    SilviaCiurea
    Încă nu există evaluări
  • Clase Si Obiecte
    Clase Si Obiecte
    Document149 pagini
    Clase Si Obiecte
    Pahonea Gigi
    Încă nu există evaluări
  • Curs 3
    Curs 3
    Document38 pagini
    Curs 3
    Daniel Popa
    Încă nu există evaluări
  • Curs 4
    Curs 4
    Document39 pagini
    Curs 4
    Paul Doorel
    Încă nu există evaluări
  • Poo c4
    Poo c4
    Document107 pagini
    Poo c4
    Iulica Izmana
    Încă nu există evaluări
  • POO-curs 6
    POO-curs 6
    Document46 pagini
    POO-curs 6
    Hantoiu Alin
    Încă nu există evaluări
  • 5 Mostenirea
    5 Mostenirea
    Document3 pagini
    5 Mostenirea
    Данилов Алина
    Încă nu există evaluări
  • Poo Programare Orientata Ob
    Poo Programare Orientata Ob
    Document8 pagini
    Poo Programare Orientata Ob
    istef2010
    Încă nu există evaluări
  • Notiuni de C++
    Notiuni de C++
    Document19 pagini
    Notiuni de C++
    Radu
    Încă nu există evaluări
  • 11 A ClaseAtributeOperatii
    11 A ClaseAtributeOperatii
    Document11 pagini
    11 A ClaseAtributeOperatii
    Gabe Gabe
    Încă nu există evaluări
  • Curs11 Mostenire
    Curs11 Mostenire
    Document5 pagini
    Curs11 Mostenire
    Miatovici Sasa
    Încă nu există evaluări
  • Paoo C04 2021
    Paoo C04 2021
    Document55 pagini
    Paoo C04 2021
    LimonCello
    Încă nu există evaluări
  • Exceptii Java
    Exceptii Java
    Document8 pagini
    Exceptii Java
    Ciobanu Stanislav
    Încă nu există evaluări
  • Curs 2 ISP PDF
    Curs 2 ISP PDF
    Document22 pagini
    Curs 2 ISP PDF
    Costin P
    Încă nu există evaluări
  • Curs 2 ISP 2024
    Curs 2 ISP 2024
    Document24 pagini
    Curs 2 ISP 2024
    Popescu Matei
    Încă nu există evaluări
  • Polimorfism
    Polimorfism
    Document5 pagini
    Polimorfism
    SilviaCiurea
    Încă nu există evaluări
  • Lab 4 Rom
    Lab 4 Rom
    Document6 pagini
    Lab 4 Rom
    o m
    Încă nu există evaluări
  • Programare Orientata Obiect
    Programare Orientata Obiect
    Document18 pagini
    Programare Orientata Obiect
    Drianu Adrian
    Încă nu există evaluări
  • 16 Functii Virtuale Si Poli
    16 Functii Virtuale Si Poli
    Document4 pagini
    16 Functii Virtuale Si Poli
    Patrick Johnston
    Încă nu există evaluări
  • POO (Programare Orientată Pe Obiect)
    POO (Programare Orientată Pe Obiect)
    Document13 pagini
    POO (Programare Orientată Pe Obiect)
    Bianca Padurariu
    Încă nu există evaluări
  • Curs C#
    Curs C#
    Document22 pagini
    Curs C#
    AlexNMA
    Încă nu există evaluări
  • CursJava 02 CristianIonita OOP
    CursJava 02 CristianIonita OOP
    Document17 pagini
    CursJava 02 CristianIonita OOP
    Aysel-Ioana BATCOVEANU
    Încă nu există evaluări
  • Python101 Curs3 Fall21
    Python101 Curs3 Fall21
    Document48 pagini
    Python101 Curs3 Fall21
    Duta Cosmin
    Încă nu există evaluări
  • Clase Abstracte Interfete
    Clase Abstracte Interfete
    Document11 pagini
    Clase Abstracte Interfete
    Diana Hartan
    Încă nu există evaluări
  • l3 Po
    l3 Po
    Document3 pagini
    l3 Po
    Georgiana Berbece
    Încă nu există evaluări
  • Poo C#
    Poo C#
    Document13 pagini
    Poo C#
    cosminadumitrita
    Încă nu există evaluări
  • Programarea Avansata
    Programarea Avansata
    Document8 pagini
    Programarea Avansata
    iry_piry
    Încă nu există evaluări
  • POO Cap6
    POO Cap6
    Document8 pagini
    POO Cap6
    dana nicol
    Încă nu există evaluări
  • Pentru Examen
    Pentru Examen
    Document11 pagini
    Pentru Examen
    ramsesaha
    Încă nu există evaluări
  • POO Curs 06 2023
    POO Curs 06 2023
    Document38 pagini
    POO Curs 06 2023
    evelyne
    Încă nu există evaluări
  • Clase PHP
    Clase PHP
    Document73 pagini
    Clase PHP
    Dariu_
    100% (1)
  • Lab 5 Rom
    Lab 5 Rom
    Document5 pagini
    Lab 5 Rom
    Alex Tronciu
    Încă nu există evaluări
  • Programare Web: Programarea Orientată Pe Obiecte În PHP. Crearea de Imagini Şi Documente PDF Cu PHP
    Programare Web: Programarea Orientată Pe Obiecte În PHP. Crearea de Imagini Şi Documente PDF Cu PHP
    Document40 pagini
    Programare Web: Programarea Orientată Pe Obiecte În PHP. Crearea de Imagini Şi Documente PDF Cu PHP
    Serghei Urban
    Încă nu există evaluări
  • Curs 6
    Curs 6
    Document42 pagini
    Curs 6
    Daniel Popa
    Încă nu există evaluări
  • Programare Web: Programarea Orientată Pe Obiecte În PHP. Crearea de Imagini Şi Documente PDF Cu PHP
    Programare Web: Programarea Orientată Pe Obiecte În PHP. Crearea de Imagini Şi Documente PDF Cu PHP
    Document40 pagini
    Programare Web: Programarea Orientată Pe Obiecte În PHP. Crearea de Imagini Şi Documente PDF Cu PHP
    Serghei Urban
    Încă nu există evaluări
  • Examen La POO
    Examen La POO
    Document30 pagini
    Examen La POO
    HatyManagarm
    Încă nu există evaluări
  • Poo2 2 d2 Poo Merged
    Poo2 2 d2 Poo Merged
    Document41 pagini
    Poo2 2 d2 Poo Merged
    Ștefania Mircea
    Încă nu există evaluări
  • Clase Interne
    Clase Interne
    Document8 pagini
    Clase Interne
    focusormadalina
    Încă nu există evaluări
  • 9 - Clase Abstracte
    9 - Clase Abstracte
    Document3 pagini
    9 - Clase Abstracte
    Данилов Алина
    Încă nu există evaluări
  • PHP OOP - Clase Si Obiecte, Metoda Constructor OOP
    PHP OOP - Clase Si Obiecte, Metoda Constructor OOP
    Document24 pagini
    PHP OOP - Clase Si Obiecte, Metoda Constructor OOP
    Ion Temciuc
    Încă nu există evaluări
  • Lucrarea de Laborator Nr2
    Lucrarea de Laborator Nr2
    Document7 pagini
    Lucrarea de Laborator Nr2
    catalina bucur
    Încă nu există evaluări
  • Curs 8
    Curs 8
    Document9 pagini
    Curs 8
    adirom47
    Încă nu există evaluări
  • Programarea Orientata Pe Obiecte - C++
    Programarea Orientata Pe Obiecte - C++
    Document42 pagini
    Programarea Orientata Pe Obiecte - C++
    livius969
    Încă nu există evaluări
  • Poo 7
    Poo 7
    Document9 pagini
    Poo 7
    Dragos Popa
    Încă nu există evaluări
  • Subiecte Examen Zi
    Subiecte Examen Zi
    Document5 pagini
    Subiecte Examen Zi
    Anonymous BYivjOHK3
    Încă nu există evaluări
  • Info 2011
    Info 2011
    Document3 pagini
    Info 2011
    Daniel Popa
    Încă nu există evaluări
  • Lab 2
    Lab 2
    Document5 pagini
    Lab 2
    Daniel Popa
    Încă nu există evaluări
  • Capitolul2 Writer
    Capitolul2 Writer
    Document128 pagini
    Capitolul2 Writer
    Daniel Popa
    Încă nu există evaluări
  • Tivoli X150 Lista de Preturi
    Tivoli X150 Lista de Preturi
    Document5 pagini
    Tivoli X150 Lista de Preturi
    Daniel Popa
    Încă nu există evaluări
  • Capitolul4 Impress
    Capitolul4 Impress
    Document53 pagini
    Capitolul4 Impress
    Daniel Popa
    Încă nu există evaluări
  • Capitolul1 Introducere
    Capitolul1 Introducere
    Document17 pagini
    Capitolul1 Introducere
    Daniel Popa
    Încă nu există evaluări
  • Curs 14
    Curs 14
    Document31 pagini
    Curs 14
    Daniel Popa
    Încă nu există evaluări
  • Curs 9
    Curs 9
    Document29 pagini
    Curs 9
    Daniel Popa
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document4 pagini
    Lab 1
    Daniel Popa
    Încă nu există evaluări
  • Lab 4
    Lab 4
    Document2 pagini
    Lab 4
    Daniel Popa
    Încă nu există evaluări
  • Curs 1
    Curs 1
    Document39 pagini
    Curs 1
    Daniel Popa
    Încă nu există evaluări
  • Curs 3
    Curs 3
    Document38 pagini
    Curs 3
    Daniel Popa
    Încă nu există evaluări
  • Lab 6
    Lab 6
    Document2 pagini
    Lab 6
    Daniel Popa
    Încă nu există evaluări
  • CAP6
    CAP6
    Document10 pagini
    CAP6
    Daniel Popa
    Încă nu există evaluări
  • CAP2
    CAP2
    Document9 pagini
    CAP2
    Daniel Popa
    Încă nu există evaluări
  • Curs 12
    Curs 12
    Document26 pagini
    Curs 12
    Daniel Popa
    Încă nu există evaluări
  • CAP10
    CAP10
    Document5 pagini
    CAP10
    Daniel Popa
    Încă nu există evaluări
  • CAP12
    CAP12
    Document8 pagini
    CAP12
    Daniel Popa
    Încă nu există evaluări
  • Info cls9 Scurt
    Info cls9 Scurt
    Document1 pagină
    Info cls9 Scurt
    Daniel Popa
    Încă nu există evaluări
  • Informatica Clasa 9a
    Informatica Clasa 9a
    Document1 pagină
    Informatica Clasa 9a
    Daniel Popa
    Încă nu există evaluări
  • CAP9
    CAP9
    Document8 pagini
    CAP9
    Daniel Popa
    Încă nu există evaluări
  • Test Expresii Logice C
    Test Expresii Logice C
    Document2 pagini
    Test Expresii Logice C
    Daniel Popa
    Încă nu există evaluări
  • Info cls11
    Info cls11
    Document1 pagină
    Info cls11
    Daniel Popa
    Încă nu există evaluări
  • Info cls9
    Info cls9
    Document1 pagină
    Info cls9
    Daniel Popa
    Încă nu există evaluări
  • Tic CLS10
    Tic CLS10
    Document1 pagină
    Tic CLS10
    Daniel Popa
    Încă nu există evaluări
  • Info cls10
    Info cls10
    Document1 pagină
    Info cls10
    Daniel Popa
    Încă nu există evaluări
  • Test Stiva Struct Siruri de Caract
    Test Stiva Struct Siruri de Caract
    Document2 pagini
    Test Stiva Struct Siruri de Caract
    Daniel Popa
    Încă nu există evaluări
  • Test Recursivitate Bac
    Test Recursivitate Bac
    Document2 pagini
    Test Recursivitate Bac
    Daniel Popa
    Încă nu există evaluări
  • Test Cls 9a C
    Test Cls 9a C
    Document5 pagini
    Test Cls 9a C
    Daniel Popa
    Încă nu există evaluări