Tag: herança
estudar1920 – as heranças simples, em c++
As heranças “simples”, herança única, tem como precipícios que a classe que for derivada herda:
se o acesso for private: herda os membros públicos e protegidos como privados;
se o acesso for protected: herda os membros públicos e protegidos como protegidos;
se o acesso for public: herda exatamente os mesmos níveis de proteção dos membros da classe-base;
exemplo:
#include <iostream>
using namespace std;
class Veiculo
{
private:
int passageiros, velocidade;
public:
Veiculo();
~Veiculo();
int getPassageiros();
void setPassageiros(int p);
int getVelocidade();
void setVelocidade(int v);
void Imprime();
};
Veiculo::Veiculo()
{
}
Veiculo::~Veiculo()
{
cout << "\ndestrutor do veiculo com velocidade " << getVelocidade() << endl;
passageiros = NULL;
velocidade = NULL;
}
void Veiculo::setPassageiros(int p)
{
passageiros = p;
}
int Veiculo::getPassageiros()
{
return passageiros;
}
void Veiculo::setVelocidade(int v)
{
velocidade = v;
}
int Veiculo::getVelocidade()
{
return velocidade;
}
void Veiculo::Imprime()
{
cout << "\nImprime do Veiculo com velocidade " << getVelocidade() << endl;
}
//as heranças
class Automovel : public Veiculo
{
private:
string tipo;
public:
Automovel();
~Automovel();
void setTipo(string s);
string getTipo();
void Imprime();
};
Automovel::Automovel()
{
}
Automovel::~Automovel()
{
cout << "\ndestrutor do automovel com velocidade: " << getVelocidade() <<endl;
tipo = "";
}
void Automovel::setTipo(string s)
{
tipo = s;
}
string Automovel::getTipo()
{
return tipo;
}
void Automovel::Imprime()
{
cout << "\nImprime do Automovel com velocidade: " << getVelocidade() << endl;
}
class Comboio : public Veiculo
{
private:
int carruagens;
public:
Comboio();
~Comboio();
void setCarruagens(int c);
int getCarruagens();
void Imprime();
};
Comboio::Comboio()
{
}
void Comboio::setCarruagens(int c)
{
carruagens = c;
}
int Comboio::getCarruagens()
{
return carruagens;
}
Comboio::~Comboio()
{
cout << "\ndestrutor do comboio com velocidade " << getVelocidade() << endl;
}
void Comboio::Imprime()
{
cout << "\nImprime do Comboio com velocidade " << getVelocidade() << endl;
}
int main()
{
Veiculo vei1;
vei1.Imprime();
Automovel auto1, auto2;
auto1.setTipo("renault");
auto1.setVelocidade(120);
auto1.setPassageiros(4);
auto1.Imprime();
Comboio comb1;
comb1.setCarruagens(4);
comb1.setVelocidade(220);
comb1.Imprime();
return 0;
}
Programação avançada – capitulo 5
A composição e a herança:
por composição: quando temos uma classe cujos membros são referências para objetos de outras classes
por herança: quando se cria uma classe que seja de um tipo de uma classes que já existe (uma especialização). Quando não existe uma derivação vamos estar a criar uma classe derivada da class Object, sendo que esta classe é a classe base de uma hierarquia a que todas as classes em Java pertencem
Na herança, isto é na classe derivada, para se fazer uso de métodos da classe base temos que usar a expressão super (caso tenham o mesmo nome)
Um exemplo de composição:
package e13;
class Pagina {
private int numero;
private int quantidadePalavras;
public Pagina() {
this(1, 100);
}
public Pagina(int n, int qp) {
numero = n;
quantidadePalavras = qp;
}
@Override
public String toString() {
return "\n Pagina " + " numero " + numero + " quantidade paginas " + quantidadePalavras;
}
}
class Livro {
private boolean capa;
private Pagina pagina;
public Livro() {
this(false, 2, 200);
}
public Livro(boolean c, int n, int qp) {
capa = c;
pagina = new Pagina(n, qp);
}
@Override
public String toString() {
return "\ncapa " + capa + " pagina livro " + pagina;
}
}
public class e13 {
public static void main(String args[]) {
System.out.println("\n A composição de classes:");
Livro l1 = new Livro();
System.out.println("\n surge:" + l1);
Livro l2 = new Livro(true, 3, 300);
System.out.println("\n surge:" + l2);
}
}
Um exemplo de Herança:
package e13;
class Pagina {
private int numero;
private int quantidadePalavras;
public Pagina() {
this(1, 100);
}
public Pagina(int n, int qp) {
numero = n;
quantidadePalavras = qp;
}
protected void setNumeroPagina(int p) {
numero = p;
}
protected int getNumeroPagina() {
return numero;
}
protected void setQuantidadePalavras(int qp) {
quantidadePalavras = qp;
}
protected int getQuantidadePalavras() {
return quantidadePalavras;
}
@Override
public String toString() {
return "\n Pagina " + " numero " + numero + " quantidade paginas " + quantidadePalavras;
}
}
class PaginaComCores extends Pagina {
private boolean cor;
public PaginaComCores() {
this(false);
}
public PaginaComCores(boolean c) {
cor = c;
}
protected void setCor(boolean c) {
cor = c;
}
protected boolean getCor() {
return cor;
}
@Override
public String toString() {
return "\n PaginaComCores " + super.toString() + ", cor " + cor;
}
}
public class e13 {
public static void main(String args[]) {
System.out.println("\n A herança de classes:");
Pagina p1 = new Pagina();
System.out.println(p1);
PaginaComCores p2 = new PaginaComCores(true);
System.out.println(p2);
}
}
Escolher entre composição e derivação:
se um objecto contem objectos de outra classe – composição ( …”contém” …)
se um objecto é especializado de outra classes – derivação/herança ( … “é” …)
O uso de constantes de classe, pode se aplicado através do modificador final
O final associado a uma variável, torna a variável constante
O final associado a uma referência, torna a referência constante
O final associado a um método, impede que uma derivada possa redefinir esse método
O final associado a uma classe, impede que essa classe seja derivada
package e14;
class Pagina {
private int numero0 = 0;
private final int numero1 = 1;
static final int numero2 = 2;
public static final int numero3= 3;
void setnumero0(int n0){
numero0=n0;
}
int getNumero0(){
return numero0;
}
public Pagina() {
}
@Override
public String toString() {
return "\n Pagina " + " numero " + numero1 + " - " + numero2 + " - " + numero3;
}
}
public class e14 {
public static void main(String args[]) {
System.out.println("\n O uso da expressão final:");
Pagina p1 = new Pagina();
p1.setnumero0(9);
System.out.println(p1.getNumero0());
}
}
Exemplo de erro aplicado a uma classe e construção de uma derivada
//v1
package e14;
final class Pagina {
private int numero0 = 0;
private final int numero1 = 1;
static final int numero2 = 2;
public static final int numero3= 3;
void setnumero0(int n0){
numero0=n0;
}
int getNumero0(){
return numero0;
}
public Pagina() {
}
@Override
public String toString() {
return "\n Pagina " + " numero " + numero1 + " - " + numero2 + " - " + numero3;
}
}
class PaginaACores extends Pagina{
boolean cores;
PaginaACores(){
}
}
public class e14 {
public static void main(String args[]) {
System.out.println("\n O uso da expressão final em classes:");
}
}
estudar09 – classes e a herança ()
#include
#include
using namespace std;
class pai{
public:
void dinheiro(){
cout << "eu sou um milionario";
}
};
class filho : public pai{
//a classe filho herdou a função do pai através do principio da herança;
public:
};
int main(int argc, char** argv) {
filho s;
s.dinheiro();
return 0;
}