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; }