Tag: polimorfismo

estudar1920 – o polimorfismo, em c++

O polimorfismo, permite que objectos tenham a capacidade de ter variados comportamentos em função das suas particularidades e ambientes onde estão inseridos. Para isso é necessário usar métodos virtuais e classes abstractas.
Os ponteiros ou apontadores são endereços de memória que permitem armazenar endereços de memória de outras variáveis ou de objectos
Um ponteiro quando declarado faz uso do operador unário de indirecção (*), exemplo: int * curso; // int é o tipo de dados, e curso é o nome do ponteiro para a variável
Para se aceder ao endereço de memória tem que se faz usando o operador de leitura de endereços (&), por exemplo: curso = &casa; // em que curso é o ponteiro que foi previamente declarado, e &casa é o nome do endereço que vai ser assumido de memória variável;

exemplo:

#include <iostream>

using namespace std;

int main()
{
	int comida = 20;
	int * aponta;
	aponta = &comida;
	cout << "vou mostrar: " << *aponta << endl;

	return 0;
}

os ponteiros também podem ser usados para objectos, e neste caso a sua declaração tem que ser feita por exemplo: Corrida *apontar; //Corrida é o nome da classe, e apontar é o nome do ponteiro.
Não esquecer que para se aceder a essa zona da memória é necessário primeiro indicar que o ponteiro está a olhar para a respectiva classe: apontar = &casa; //apontar, é o nome do ponteiro, e casa é a instância da classe
para se aceder aos membros apontados deve fazer-se uso do operador de referência (->) e não o operador (.)
exemplo de ponteiros para objectos:

#include <iostream>

using namespace std;

class Carro
{
private:
	int velocidade;
public:
	Carro();
	~Carro();
	void setVelocidade(int v);
	int getVelocidade();
	void imprimir();
};

Carro::Carro()
{
	cout << "\nconstrutor do carro" << getVelocidade() << endl;
}

Carro::~Carro()
{
	cout << "\ndestrutor do carro " << getVelocidade() << endl;
}

void Carro::setVelocidade(int v)
{
	velocidade = v;
}

int Carro::getVelocidade()
{
	return velocidade;
}

void Carro::imprimir()
{
	cout << "\nacerca do carro " << getVelocidade() << endl; } int main() { Carro car1; car1.setVelocidade(100); Carro * aponta; aponta = &car1; aponta->imprimir();

	aponta->setVelocidade(10);
	car1.imprimir();
	
	return 0;
}

Existe também uma palavra chave que é o this
O this é um atalho que permite apontar para a classe actual, e é útil para se referir a membros dessa classe.
exemplo:

#include <iostream>

using namespace std;

class Carro
{
private:
	int velocidade;
public:
	Carro();
	~Carro();
	void setVelocidade(int v);
	int getVelocidade();
	bool compararVelocidade(Carro car);
	void imprimir();
};

Carro::Carro()
{
	cout << "\nconstrutor do carro" << getVelocidade() << endl;
}

Carro::~Carro()
{
	cout << "\ndestrutor do carro " << getVelocidade() << endl; } void Carro::setVelocidade(int v) { velocidade = v; } int Carro::getVelocidade() { return velocidade; } bool Carro::compararVelocidade(Carro car) { return this->getVelocidade() > car.getVelocidade();
}

void Carro::imprimir()
{
	cout << "\nacerca do carro " << getVelocidade() << endl;
}

int main()
{
	Carro car1, car2;
	car1.setVelocidade(10);
	car2.setVelocidade(20);
	if(car1.compararVelocidade(car2))
	{
		cout << "\ncar1 > car2" << endl;
	}else
	{
		cout << "\ncar1 < car2" << endl;
	}
	
	return 0;
}

Existem também os métodos virtuais. Um método virtual é declarado numa classe base, mas é implementado nas classes que derivam. Esta virtualização vai permitir que as classes derivadas façam uso desse método mas variando o seu comportamento.
Os métodos virtuais têm que ser declarados na secção pública de uma classe base

 

Tags : , ,