duminică, 16 martie 2008

Mostenire

Pentru mai multe detalii puteti citi:
http://www.codersource.net/cpp_tutorial_inheritance.html
http://www.cs.bu.edu/teaching/cpp/inheritance/intro/
http://www.cplusplus.com/doc/tutorial/inheritance.html

Mostenirea presupune sa avem o clasa de baza A pe care sa o derivam in clasa derivata B (sau mai multe clase derivate C,D,E...). Putem avea si mostenire multipla - clase de baza A si B le mostenim in clasa derivata C.

Sintaxa:

class B: A
{
...
};

Clasa B mosteneste clasa A.

class C: A,B
{...};

Clasa C mosteneste clasele A si B.

Ce inseamna mostenirea? (Vom considera exemplul mostenirii simple B este derivata din A) Clasa B va avea toati membrii clasei A, pe langa care mai putem adauga extensii specifice clasei derivate. Sa presupunem ca am implementat o clasa lista simplu inlantuita numita L1. Pentru a construi o lista dublu inlantuita este suficient sa mostenim L1 si sa mai adaugam o proprietate si o metoda pentru deplasarea la stanga.

O clasa derivata mosteneste toti membrii clasei de baza cu exceptia:
  • constructorilor si destructorilor
  • operatorul de atribuire
  • clasele si metodele friend
Desi nu sunt mosteniti, constructorul si destructorul clasei de baza sunt intotdeauna apelati cand cream un nou obiect de tipul clasei derivate.
Putem de asemenea apela si constructorii cu parametri:

class A{
A(int,int);
};

class B:A
{ B(int a):A(a,a);
};

Despre specificatorii de access am mai discutat in introducere. Ii mai putem aplica si la felul in care mostenim o clasa: putem mosteni clasa A privat(implicit), public si protected. Specificatorii se refera la proprietatile membrilor mosteniti din clasa de baza in clasa derivata.

Putem suprascrie metodele din clasele de baza. Este recomandat (si vom vedea laboratorul viitor de ce) ca in fata metodelor pe care le vrem suprascrise in clasa derivata sa folosim specificatorul virtual:

class A
{
...
virtual int f();
};

Niciun comentariu: