Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Rodrigosolari en 5 Mayo 2012, 19:59 pm



Título: Pregunta sobre herencia y polimorfismo
Publicado por: Rodrigosolari en 5 Mayo 2012, 19:59 pm
buenas mi pregunta va ahacerca sobre Herencia, Polimorfismo y contructores
en herencia, se ereda todos los metodos, y los constructores son un metodo??
mi pregunta va sobre la linea comentada del codigo, no se supone que ese constructor debe heredar al la clase b, y el constructos polimorfico(elque recibe parametros, debe estar incluido en la clase b???, porque tenemos que llamar a ese constructor, con el operador :: ?
 #include <iostream>
 using namespace std;
 class ClaseA {
public:
    void Incrementar() {
    cout << "Suma 1" << endl;
}
void Incrementar(int n) {
    cout << "Suma " << n << endl;
}
};
class ClaseB : public ClaseA {
public:
    void Incrementar() {
    cout << "Suma 2" << endl;
    }
};
int main() {
    ClaseB objeto;
    objeto.Incrementar();
    // objeto.Incrementar(10);
    objeto.ClaseA::Incrementar();
    objeto.ClaseA::Incrementar(10);
    cin.get();
    return 0;
}


Título: Re: Pregunta sobre herencia y polimorfismo
Publicado por: david_BS en 6 Mayo 2012, 01:51 am
La única "Incrementar" propia de la clase B no lleva parámetros, y aunque B herede de la clase A, el compilador acepta como referencia de nombre a la de la clase B, osea a la primera y única "Incrementar" de B, ya que el objeto es de clase B.

aparte los constructores son del mismo nombre de la clase, no se a que estás haciendo referencia con tu pregunta sobre los constructores..

en resumen, se trata de un problema a causa de que ambas clases tienen una función propia llamada "Incrementar", por lo que para usar herencia vas a tener que especificar que la referencia es a la clase A, en este caso

Código:
objeto.ClaseA::Incrementar(); 
objeto.ClaseA::Incrementar(10);



Título: Re: Pregunta sobre herencia y polimorfismo
Publicado por: Rodrigosolari en 6 Mayo 2012, 08:51 am
me ekivoke crei que eran constructores.. .estuve enfermo yno me percate de ese detalle... osea metodos polimorficos no se heredan si la clase hererada tiene el mismo metodo... si tuviera otro metodo... ajm ajm... por ejemplo void Incrementar1(int a, int b); si podria llamar desde la clase hererada