• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

zecapistolas

Dúvida em Herança

3 mensagens neste tópico

Viva Pessoal,

Vamos supor o seguinte exemplo:

Tenho a Classe A e a Classe B que é derivada da Classe A....

Na Classe C tenho um vector<A *>, para facilitar o código e a própria interpretação do problema em si, que contém Objectos do Tipo B. Mas existe uma situação em que preciso aceder a métodos da Classe B, mas como o vector está definido como Objectos do Tipo A, não consigo aceder a esses métodos, apesar de lá estarem Objectos do Tipo B.

Como posso fazer isso?!

cumps  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se tens a certeza que só há objectos do tipo B, podes fazer um cast para um apontador para objectos do tipo B. Exemplo:

#include <iostream>
#include <vector>
using namespace std;

class A {
public:
	int a;
	void printA() {		cout << "A: " << a << endl;			}
};
class B : public A {
public:
	int b;
	void printB() {		cout << "A: " << a << "  B: " << b << endl;	}
};
class C {
public: 
	vector< A* > v;
	void printBs() {
		for( size_t i = 0 ; i < v.size() ; i++) {
			B* ptr = (B*) v[i];
			ptr->printB();
		}
	}
	void addObj( A* obj ) { v.push_back(obj);	}
};
int main() {
B b1, b2;
C c;

b1.a = 1 , b1.b = 2;
b2.a = 3 , b2.b = 4;

c.addObj( &b1 );
c.addObj( &b2 );
c.printBs();
return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pela ajuda, sim eu também já tinha pensado num cast estava era a fazer mal....

Estava a fazer:

B* prt = (B)v[i]

Quando devia fazer (como tu disses-te):

B* prt = (B*)v[i]

cumps  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora