Day: February 7, 2020

estudar1920 – as heranças múltipla e a superclasse, em c++

Uma classe pode herdar múltiplos membros de várias classes e uma classe derivada por também ser uma superclasse, havendo uma árvore de derivação

exemplo de superclasse (veiculo<-autocarro<-minicoisa):

#include <iostream>

using namespace std;

class Veiculo
{
private:
	int passageiros;
public:
	Veiculo();
	~Veiculo();

	void setPassageiros(int p);
	int getPassageiros();
	
	void imprime();
};

Veiculo::Veiculo()
{
	cout << "\nconstrutor de veiculo " << getPassageiros() << endl;
}

Veiculo::~Veiculo()
{
	cout << "\ndestrutor de veiculo " << getPassageiros() << endl;
	passageiros = NULL;
}

void Veiculo::setPassageiros(int p)
{
	passageiros = p;
}

int Veiculo::getPassageiros()
{
	return passageiros;
}

void Veiculo::imprime()
{
	cout << "\nsou o veiculo " << getPassageiros() << endl;
}

class Autocarro : public Veiculo
{
private:
	int portas;
public:
	Autocarro();
	~Autocarro();
	void setPortas(int p);
	int getPortas();

	void imprime();
};

Autocarro::Autocarro()
{
	cout << "\nconstrutor de autocarro " << getPortas() << endl;
}

Autocarro::~Autocarro()
{
	cout << "\ndestrutor de autocarro " << getPortas() << endl;
	portas = NULL;
}

void Autocarro::setPortas(int p)
{
	portas = p;
}

int Autocarro::getPortas()
{
	return portas;
}

void Autocarro::imprime()
{
	cout << "\sou o autocarro " << getPortas() << endl;
}

class MiniCoisa: public Autocarro
{
private:
	int rodinhas;
public:
	MiniCoisa();
	~MiniCoisa();
	void setRodinhas(int r);
	int getRodinhas();

	void imprimir();
};

MiniCoisa::MiniCoisa()
{
	cout << "\nconstrutor de minicoisa " << getRodinhas() << endl;
}

MiniCoisa::~MiniCoisa()
{
	cout << "\ndestrutor de rodinhas " << getRodinhas() << endl;
	rodinhas = NULL;
}

void MiniCoisa::setRodinhas(int r)
{
	rodinhas = r;
}

int MiniCoisa::getRodinhas()
{
	return rodinhas;
}

void MiniCoisa::imprimir()
{
	cout << "\nsou o rodinhas " << getRodinhas() << endl;
}

int main()
{
	Veiculo vei1;
	vei1.imprime();

	Autocarro auto1;
	auto1.setPortas(3);
	auto1.imprime();

	MiniCoisa min1;
	min1.setRodinhas(5);
	min1.imprimir();

	return 0;
}

exemplo de herdar de multiplas classes (minicoisa de veiculo E minicoisa de autocarro):

#include <iostream>

using namespace std;

class Veiculo
{
private:
	int passageiros;
public:
	Veiculo();
	~Veiculo();

	void setPassageiros(int p);
	int getPassageiros();

	void imprime();
};

Veiculo::Veiculo()
{
	cout << "\nconstrutor de veiculo " << getPassageiros() << endl;
}

Veiculo::~Veiculo()
{
	cout << "\ndestrutor de veiculo " << getPassageiros() << endl;
	passageiros = NULL;
}

void Veiculo::setPassageiros(int p)
{
	passageiros = p;
}

int Veiculo::getPassageiros()
{
	return passageiros;
}

void Veiculo::imprime()
{
	cout << "\nsou o veiculo " << getPassageiros() << endl;
}

class Autocarro
{
private:
	int portas;
public:
	Autocarro();
	~Autocarro();
	void setPortas(int p);
	int getPortas();

	void imprime();
};

Autocarro::Autocarro()
{
	cout << "\nconstrutor de autocarro " << getPortas() << endl;
}

Autocarro::~Autocarro()
{
	cout << "\ndestrutor de autocarro " << getPortas() << endl;
	portas = NULL;
}

void Autocarro::setPortas(int p)
{
	portas = p;
}

int Autocarro::getPortas()
{
	return portas;
}

void Autocarro::imprime()
{
	cout << "\sou o autocarro " << getPortas() << endl;
}

class MiniCoisa : public Autocarro, public Veiculo
{
private:
	int rodinhas;
public:
	MiniCoisa();
	~MiniCoisa();
	void setRodinhas(int r);
	int getRodinhas();

	void imprimir();
};

MiniCoisa::MiniCoisa()
{
	cout << "\nconstrutor de minicoisa " << getRodinhas() << endl;
}

MiniCoisa::~MiniCoisa()
{
	cout << "\ndestrutor de rodinhas " << getRodinhas() << endl;
	rodinhas = NULL;
}

void MiniCoisa::setRodinhas(int r)
{
	rodinhas = r;
}

int MiniCoisa::getRodinhas()
{
	return rodinhas;
}

void MiniCoisa::imprimir()
{
	cout << "\nsou o rodinhas " << getRodinhas() << endl;
}

int main()
{
	MiniCoisa min1;
	min1.setRodinhas(10);
	min1.setPassageiros(4);
	min1.setPortas(2);
	min1.imprimir();

	return 0;
}
Tags : , ,

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 : , ,

estudar1920 – classes em c++

Exemplo de uma classe, construtor, destrutor, método, protótipo e declaração no main de instâncias da classe

#include <iostream>

using namespace std;
class Rectangulo
{
private:
	//atributos
	int base, altura;

public:
	//construtor
	Rectangulo(int b, int a)
	{
		base = b;
		altura = a;
	}
	//destrutor
	~Rectangulo()
	{
		cout << "\ndestrutor " << endl;
		base = NULL;
		altura = NULL;
	}
	//método
	int area(); //prótotipo 
};

int Rectangulo::area()
{
	return base * altura;
}


int main()
{
	Rectangulo r1(10,10), r2(4,4); //instâncias
	cout << "\narea do r1: " << r1.area() << endl;
	cout << "\narea do r2: " << r2.area() << endl;
	return 0;
}
Tags :