| Pas 01 exemple_polimorfisme_01.cxx |
- streams de la llibreria estàndard per escriure a consola
- namespace std::nom
|
| Pas 02 exemple_polimorfisme_02.cxx |
- definició d'una classe
- instaciacio i missatge a un objecte
|
| Pas 03 exemple_polimorfisme_03.cxx |
- classe acabada en ;
- mètode public:
|
| Pas 04 exemple_polimorfisme_04.cxx |
- Fem una subclasse d'Animal: Elefant. En C++ es fa "SubClasse : public SuperClasse"
|
| Pas 05 exemple_polimorfisme_05.cxx |
- cridem el mètode usant un punter
- sintaxis:
UnTipus* punter a UnTipus
&unObjecte adreça d'unObjecte
|
| Pas 06 exemple_polimorfisme_06.cxx |
- Convertim el mètode a virtual. Així el sistema d'execució sap resoldre
l'enllaç cap el mètode concret.
- Afegim noves classes: Granota i Gat
|
| Pas 07 exemple_polimorfisme_07.cxx |
- Pas de paràmetre per referència: "Tipus&"
És un altre cas de polimorfisme.
- Refem el main: ara instanciarem objectes i cridarem la nova funció
|
| Pas 08 exemple_polimorfisme_08.cxx |
- Extreiem les classes l'Animal a un arxiu "animals.hxx"
Nota: normalment usarem un fitxer per classe.
- Ara no és necessari incloure l'<iostream> perquè ja està al header
- Pas de paràmetre per referència: "Tipus&"
És un altre cas de polimorfisme.
- Com que no pensem modificar l'animal, passem per referència constant
Això fa que necessitem que el mètode escriuEspecie() també
sigui declarat constant
- Refem el main: ara instanciarem objectes i cridarem la nova funció
|
| Pas 09 animals_09.hxx |
- A tots els headers (.hxx) els hi afegirem sistemàticamen
una condició del precompilador #ifndef - #define - #endif
Això evitarà que es redefineixin les mateixes classes desde diferents unitats
de compilaciós (diferents .cxx)
- És necessari incloure <iostream> perquè en fem ús aquí.
- Hem declarat el mètode 'const'. Amb això estem dient que el mètode
no modifica l'estat de l'objecte.
|
| Pas 10 exemple_polimorfisme_10.cxx |
- Anem a introduir els animals en una col.lecció
- <vector> suporta la sintaxis d'array (subscript)
- És una classe 'template' : usarem std::vector<Animal>
|
| Pas 11 exemple_polimorfisme_11.cxx |
- ara el vector serà de punters a Animal
- iterarem amb un for
- mètode size() del vector
- usem "*" per referir-nos a l'objecte apuntat per un punter. p.e: *animal[i]
|
| Pas 12 exemple_polimorfisme_12.cxx |
- ara (suposem) ens adonem que l'estructura que necessitem és una llista
i no pas un vector, ja que voldrem fer molts borrats i insercions.
- farem el canvi pas a pas:
1er: fem un typdedef de std::vector<Animals*> a un nom més senzill
i fem la iteració usant iteradors
- per cert: ens desfem la la funció escriuInfo, ja que no ens facilita el codi
|
| Pas 13 exemple_polimorfisme_13.cxx |
- Estem fent el canvi de vector a llista :
Ara que iterem amb iteradors i tenim el typdef, fer el canvi només
implica: (a) canviar el typedef i (b) canviar l'include a <list>
(Aquesta és la grandesa dels iteradors: desacoblar el codi d'iteració
de l'estructura de dades)
|
| Pas 14 animals_14.hxx |
- ara afegim un nou atribut a la base de tipus std::string
- afegim accessors d'escriptura i de lectura
|
| Pas 15 exemple_polimorfisme_15.cxx |
- usem els accessors d'escriptura i de lectura de l'atribut _nom
En resum hem après:
- com escriure per consola fent servir <iostream>
- simbols de la libreria localitzats al namespace std::
- les classes acaben en ;
- el mètodes i atributs per defecte són private
- com fer subclasses: "Sub : public Super"
- perquè serveixen els mètodes virtuals
- polimorfisme
- usar #ifndef als headers per evitar redefinicions
- pas de paràmetres per referència
- col.leccions estàndars vector i list
- typdefs
- iteradors
- std::string
- ús d'accessors
|