Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/08/2011, 10:33
mendyandola
 
Fecha de Ingreso: agosto-2011
Mensajes: 2
Antigüedad: 12 años, 9 meses
Puntos: 0
Duda sobre polimorfismo c++

Hola a tod@s en primer lugar decir que es mi primer post en este foro y dedicarle un saludo a todos los usuarios!!!

Tengo un pequeño problema teorico acerca del polimorfismo en c++, os cuento a ver si alguien me puede ayudar...

Teniendo una clase base, una clase heredada, y un mismo metodo en ambas, entra en cuestion el polimorfismo, en el programa que estoy realizando para entenderlo siempre que llamo a dicho metodo o funcion se ejecuta este dependiendo del objeto al que llame, hasta aqui ok, pero si quiero que siempre se ejecute el metodo de la clase base habria que poner la palabra VISUAL para indicar esto, (esto es lo que he entendido de la teoria) pero en la practica no ocurre asi, pongo un ejemplo a ver si alguien puede decirme que hago mal o he entendido mal la teoria... (Un saludo a todos y mil gracias de antemano)

Cliente.hpp*************************************** ***
#ifndef _CLIENTE_HPP_
#define _CLIENTE_HPP_
#include <cstdlib>
#include <iostream>


using namespace std;

class Cliente{
private:
string nombre;
string apellido;
public:
Cliente(string nom,string ape);
~Cliente();
virtual string cadena();

};

#endif

Cliente.cpp*************************************** *******
#include <cstdlib>
#include <iostream>
#include "Cliente.hpp"
using namespace std;


Cliente::Cliente(string nom,string ape){
nombre=nom;
apellido=ape;
}

Cliente::~Cliente(){
}

string Cliente::cadena(){
return nombre + " " + apellido;
}

ClienteInternet.hpp******************************* ********
#ifndef _CLIENTEINTERNET_HPP_
#define _CLIENTEINTERNET_HPP_
#include <cstdlib>
#include <iostream>
#include "Cliente.hpp"

using namespace std;

class ClienteInternet: public Cliente{
private:
int tarifa;
public:
ClienteInternet(string nom,string ape,int t);
~ClienteInternet();
string cadena();
};

#endif

ClienteInternet.cpp******************************* **********
#include <cstdlib>
#include <iostream>

#include "Cliente.hpp"
#include "ClienteInternet.hpp"

using namespace std;

ClienteInternet::ClienteInternet(string nom,string ape,int t): Cliente(nom,ape){
tarifa=t;
}

ClienteInternet::~ClienteInternet(){

}

string ClienteInternet::cadena(){

return "Tarifa Plana: "+Cliente::cadena();
}

main********************************************+
#include <cstdlib>
#include <iostream>
#include "Cliente.hpp"
#include "ClienteInternet.hpp"

using namespace std;

int main(){
Cliente c1("Pepe","Lopez");
cout << c1.cadena()<<endl;
ClienteInternet ci1("Jose","Garcia",2);
cout << ci1.cadena()<<endl;

system("PAUSE");
return EXIT_SUCCESS;
}



PD:
Se que para llamar al metodo cadena siempre de la clase base podemos usar:
Cliente::cadena();
pero asi no hace falta visual ni polimorfismo... ¿NO?


****MUCHISIMAS GRACIAS**** UN SALUDO