Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <typeinfo>
- using namespace std;
- class Mascota {
- public:
- Mascota() {
- cout << "[constructor vacio]"<<endl;
- };
- //destructor
- virtual ~Mascota(){
- cout <<"[destructor]"<<endl;
- }
- Mascota(string n):nombre(n){
- };
- virtual void ver(){
- cout << "[MascotaPadre]"<<this->nombre<<endl;
- }
- virtual void sonido(){ //virtual
- cout <<"-----"<<endl;
- }
- virtual void comer(){
- cout <<"-----"<<endl;
- }
- protected:
- string nombre;
- };
- class Perro: public Mascota{
- public:
- Perro(string n): Mascota(n) {
- }
- virtual ~Perro(){
- cout <<"[destructor de Perro]"<<endl;
- }
- void ver(){
- cout << "[Perro] ver: "<< this->nombre<<endl;
- }
- void sonido(){ //virtual
- cout <<"Ladrar"<<endl;
- }
- };
- class Gato: public Mascota{
- public:
- Gato(string n): Mascota(n) {
- }
- void ver(){
- cout << "[Gato] ver: "<< this->nombre<<endl;
- }
- void sonido(){ //virtual
- cout <<"Maujar"<<endl;
- }
- };
- class Leon: public Mascota{
- public:
- Leon() {}
- Leon(string n): Mascota(n) {
- }
- void ver(){
- cout << "[Leon] ver: "<< this->nombre<<endl;
- }
- void sonido(){ //virtual
- cout <<"Ruge"<<endl;
- }
- void comer(){
- cout <<"comer"<<endl;
- }
- };
- int main()
- {
- /*Mascota m("Sin tipo");
- m.sonido();*/
- Leon leon("Leoncio");
- leon.ver();
- leon.sonido();
- Gato gato("Dayen");
- gato.ver();
- gato.sonido();
- Perro perro("dock");
- perro.ver();
- perro.sonido();
- /**Polimorfismo:
- sin VIRTUAL + memoria estática: se muestra el método de la clase BASE (Mascota)
- con VIRTUAL + memoria estatica: se muestra el método de la clase BASE (Mascota)
- sin VIRTUAL + memoria dinámica: se muestra el método de la clase BASE (Mascota)
- con VIRTUAL + memoria dinámica: se ejecutará el método de la clase DERIVADA (Perro, Leon, Gato)
- */
- Mascota zooE[4];
- zooE[0] = leon;
- zooE[1] = gato;
- zooE[2] = perro;
- zooE[3] = Gato("Gonul");
- cout <<"**Mostrando zoologico estatico"<<endl;
- for(int i=0; i<3; i++) {
- zooE[i].ver();
- zooE[i].sonido();
- }
- Leon * leoncito = new Leon("Yerko");
- leoncito->ver();
- //parte dinámica
- Mascota *zooD[4];
- zooD[0] = new Leon();
- zooD[1] = &gato;
- zooD[2] = &perro;
- zooD[3] = new Gato("Gonul");
- //ocuparemos la librería #include <typeinfo>
- cout << "tipo de clase:" << typeid(Mascota).name()<<endl;
- cout << "tipo de clase:" << typeid(Perro).name()<<endl;
- cout << "tipo de clase:" << typeid(Leon).name()<<endl;
- cout << "tipo de clase:" << typeid(Gato).name()<<endl;
- cout << "tipo de objeto0:" << typeid(*zooD[0]).name()<<endl;
- cout << "tipo de objeto1:" << typeid(*zooD[1]).name()<<endl;
- cout << "tipo de objeto2:" << typeid(*zooD[2]).name()<<endl;
- cout << "tipo de objeto3:" << typeid(*zooD[3]).name()<<endl;
- cout <<"**Mostrando zoologico dinamico"<<endl;
- for(int i=0; i<4; i++) {
- if(typeid(*zooD[i]).name() == typeid(Gato).name()){
- cout <<"**este es un gran gato**"<<endl;
- }
- zooD[i]->ver();
- zooD[i]->sonido();
- zooD[i]->comer();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement