Programar em C++/Herança: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Daveiro (discussão | contribs)
Sem resumo de edição
Daveiro (discussão | contribs)
Sem resumo de edição
Linha 32:
 
----
 
 
 
== Inheritance between classes ==
 
 
A questão da Inherence é levar esta questão das classes vais á frente e trabalhar com elas.
 
 
 
== Derivar uma classe de uma outra ==
 
Para derivar uma classe de outra usamos o operador “:”
class derived_class_name: public base_class_name
{
};
 
Vamos ao exemplo:
// derived classes
#include <iostream>
using namespace std;
class CPolygon
{
protected:
int width, height;
public:
void set_values (int a, int b)
{ width=a; height=b;}
};
class CRectangle: public CPolygon //aqui está a derivação
{
public:
int area ()
{ return (width * height); }
};
class CTriangle: public CPolygon //outra derivação
{
public:
int area ()
{ return (width * height / 2); }
};
int main ()
{
CRectangle rect;
CTriangle trgl;
rect.set_values (4,5);
trgl.set_values (4,5);
cout << rect.area() << endl;
cout << trgl.area() << endl;
system (“pause”);
return 0;
}
 
Neste exemplo temos 2 classes que são derivadas (filhas) da classe CPolygon. O que faz é permitir aceder á função set values e ás variáveis width e height.
 
Mas vocês dizem-me que como é que é possível aceder a width e height se ela está '''protected'''.
'''A diferença com o private reside exactamente no facto das classes derivadas poderem aceder aos elementos protected mas não os private.'''
 
Podemos sintetizar então
{| border 1
|Access|| public || protected ||private
|-
|members of the same class|| yes || yes ||yes
|-
|members of derived classes|| yes || yes|| no
|-
|not members || yes || no || no
|}
 
'''Nota''':
* Claro que uma classe pode ser derivada de várias outras classes.