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;
}
Tags : , ,

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:");

      
    }
}
Tags : , , , , , , , , ,

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;
}
Tags : , , ,