No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Herencia

13/16
Recursos

Aportes 11

Preguntas 3

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

#include <iostream>
#include <string>

using namespace std;

class Animal {
    protected:
        static int numeroAnimales;
        string alimento;
    public:
        Animal();
        ~Animal();
        static int obtenerNumeroAnimales();
        string obtenerAlimento() {
            return alimento;
        }
        void comer() {
            cout << "Este animal est谩 comiendo " << alimento << "... 帽om 帽om" << endl;
        }
};

int Animal::numeroAnimales = 0;

Animal::Animal() {
    cout << "Creando nuevo animal..." << endl;
    numeroAnimales += 1;
}

Animal::~Animal() {
    cout << "Borrando animal..." << endl;
    numeroAnimales -= 1;
}

int Animal::obtenerNumeroAnimales() {
    return numeroAnimales;
}

class Herviboro : public Animal {
    public:
        Herviboro() : Animal() {
            this->alimento = "plantas";
        }
        void pastar() {
            cout << "Este animal est谩 pastando..." << endl;
        }
};

class Carnivoro : public Animal {
    public:
        Carnivoro() : Animal() {
            this->alimento = "carne";
        }
        void cazar() {
            cout << "Este animal est谩 cazando..." << endl;
        }
};

int main() {
    Animal *a = new Animal();
    Herviboro *h = new Herviboro();
    Carnivoro *c = new Carnivoro();
    cout << "Numero de animales " << Animal::obtenerNumeroAnimales() << endl;
    a->comer();    
    h->pastar();
    c->cazar();
    delete a;
    cout << "Numero de animales " << Animal::obtenerNumeroAnimales() << endl;    
}

#include <iostream>
#include <string>

using namespace std;

class Animal{
private:
static int numero_animales;
string alimento;
public:
Animal();
~Animal();
static int obtenerNumeroAnimales();
string obtenerAlimento(){
return alimento;
}
void comer(){
cout<<"Este animal esta comiendo 鈥<< alimento << " 帽um帽um鈥<<endl;

}

};

int Animal::numero_animales=0;

Animal::Animal(){
cout << 鈥淐reando nuevo animal鈥︹<< endl;
numero_animales +=1;
}

Animal::~Animal(){
cout << 鈥淏orrando animal鈥︹<< endl;
numero_animales -=1;
}

int Animal::obtenerNumeroAnimales(){
return numero_animales;
}

int main(){

Animal *a = new Animal();

cout<< "Numero de Animales: "<< Animal::obtenerNumeroAnimales()<< endl;

a->comer();

delete a;

cout<< "Numero de Animales: "<< Animal::obtenerNumeroAnimales()<< endl;

}

Private: son aquellos que son visibles solo para las clases a las que pertenecen.
Protected: son aquellos que son visibles solo en las clases a las que pertenecen adem谩s de sus subclases

#include <iostream>
#include <string>

using namespace std;

class Animal {
    protected:
        static int numeroAnimales;
        string alimento;
    public:
        Animal();
        ~Animal();
        static int obtenerNumeroAnimales();
        string obtenerAlimento() {
            return alimento;
        }
        void comer() {
            cout << "Este animal est谩 comiendo " << alimento << "... 帽om 帽om" << endl;
        }
};

int Animal::numeroAnimales = 0;

Animal::Animal() {
    cout << "Creando nuevo animal..." << endl;
    numeroAnimales += 1;
}

Animal::~Animal() {
    cout << "Borrando animal..." << endl;
    numeroAnimales -= 1;
}

int Animal::obtenerNumeroAnimales() {
    return numeroAnimales;
}

class Herviboro : public Animal {
    public:
        Herviboro() : Animal() {
            this->alimento = "plantas";
        }
        void pastar() {
            cout << "Este animal est谩 pastando..." << endl;
        }
};

class Carnivoro : public Animal {
    public:
        Carnivoro() : Animal() {
            this->alimento = "carne";
        }
        void cazar() {
            cout << "Este animal est谩 cazando..." << endl;
        }
};

int main() {
    Animal *a = new Animal();
    Herviboro *h = new Herviboro();
    Carnivoro *c = new Carnivoro();
    cout << "Numero de animales " << Animal::obtenerNumeroAnimales() << endl;
    a->comer();    
    h->pastar();
    c->cazar();
    delete a;
    cout << "Numero de animales " << Animal::obtenerNumeroAnimales() << endl;    
}

Modificadores de Acceso en la Herencia

Cuando heredamos de otra clase, a la cual podemos llamar clase padre o superclase, tambi茅n heredamos sus atributos, m茅todos, etc. a excepci贸n de los que se encuentren con el modificador de acceso private. Los que se encuentren como publicprotected ser谩n heredados a la clase hija.

Ahora cuando definimos la herencia lo hacemos por medio de declarar nuestra nueva clase, seguido de dos puntos ( : ), escribimos el modificador de acceso, tenemos 3 opciones (public, protected y private), y por 煤ltimo el nombre de la superclase.

class nombreSubClase : (public, protected o private) nombreSuperClase(){
	//C贸digo
}

De acuerdo al modificador de acceso que indiquemos al definir la herencia, as铆 ser谩 el modificador de acceso con el que se definir谩n en nuestra subclase.

Dejo una captura de pantalla de un libro de la editorial RedUsers que se llama 鈥淐++ Programaci贸n orientada a objetos鈥. Ha sido un buen complemento para entender los conceptos de este lenguaje de programaci贸n.

la clase Animal

#include <iostream>
#include <string>

using namespace std;

class Animal {
    private:
        static int numeroAnimales;
        string alimento;
    public:
        Animal();
        ~Animal();
        static int obtenerNumeroAnimales();
        string obtenerAlimento() {
            return alimento;
        }
        void comer() {
            cout << "Este animal est谩 comiendo " << alimento << "... 帽om 帽om" << endl;
        }
};

int Animal::numeroAnimales = 0;

Animal::Animal() {
    cout << "Creando nuevo animal..." << endl;
    numeroAnimales += 1;
}

Animal::~Animal() {
    cout << "Borrando animal..." << endl;
    numeroAnimales -= 1;
}

int Animal::obtenerNumeroAnimales() {
    return numeroAnimales;
}

int main() {
    Animal *a = new Animal();
    cout << "Numero de animales " << Animal::obtenerNumeroAnimales() << endl;
    a->comer();
    delete a;
    cout << "Numero de animales " << Animal::obtenerNumeroAnimales() << endl;
}
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <string>
#include <locale.h>

using namespace std;
class Mounstro {
protected:
	static int numeroMounstros;
	string alimento;
public:
	Mounstro();
	~Mounstro();
	static int obtenerNumeroMounstros();
	string obtenerAlimento() {
		return alimento;
	}
	void comer() {
		cout << "Este mounstro est谩 comiendo " << alimento << " rico, rico " << endl;
	}
	
};

int Mounstro::numeroMounstros = 0;
Mounstro::Mounstro()
{
	cout << "Creando nuevo mounstro...." << endl;
	numeroMounstros += 1;
}
int Mounstro::obtenerNumeroMounstros()
{
	return numeroMounstros;
}
Mounstro::~Mounstro()
{
	cout << "borrando bicho...." << endl;
	numeroMounstros -= 1;
}
class Herviboro : public Mounstro{
public:
	Herviboro() : Mounstro() {
		this->alimento = "plantas";
}
	void pastar() {
		cout << "Este animal est谩 pastando... " << endl;
	}
};

class Carnivoro : public Mounstro {
public :
	Carnivoro() : Mounstro() {
		this->alimento = "carne";
	}
	void cazar() {
		cout << "Este animal est谩 cazando..." << endl;
	}
};



	int main() {
		setlocale(LC_ALL, "");

		Mounstro* m = new Mounstro();
		Herviboro* h = new Herviboro();
		Carnivoro* c = new Carnivoro();

		cout << "Numero de mounstros: " << Mounstro::obtenerNumeroMounstros() << endl;
		m->comer();
		h->pastar();
		c->cazar();
		delete m;
		cout << "Numero de mounstros: " << Mounstro::obtenerNumeroMounstros() << endl;
	getch();
};

Saludos a todos,
Les comparto mi repo espero que sea de utilidad, he realizado una peque帽a estructura de archivos, ya que considero que en producci贸n es la forma m谩s adecuada, por favor en caso de que tengan alg煤n comentario estar铆a muy agradecido que me lo comenten.

Repo: https://github.com/ioviedodev/cpp_notes/tree/main/poo_example_1

#include <iostream>
#include <string>

using namespace std;

class Animal {
    protected:
        static int numeroAnimales;
        string alimento;
    public:
        Animal(); //constructor
        ~Animal(); //destructor

        static int obtenerNumeroAnimales(); //metodo 
        
        string obtenerAlimento() { //metodo
            return alimento;
        }
        void comer() { //metodo
            this->alimento = "pechungona";
            cout << "Este animal esta comiendo " << alimento << "... yomi yomi" << endl;
        }
};

int Animal::numeroAnimales = 0;

Animal::Animal() {
    cout << "Creando nuevo animal..." << endl;
    numeroAnimales += 1;
}

Animal::~Animal() {
    cout << "Borrando animal..." << endl;
    numeroAnimales -= 1;
}

int Animal::obtenerNumeroAnimales() {
    return numeroAnimales;
}

class Herviboro : public Animal { //clase hija de clase Animal
    public:
        Herviboro() : Animal() {
            this->alimento = "baretica";
        }
        void pastar() {
            cout << "Este animal esta enrolando "<< this->alimento << endl;
        }
};

class Carnivoro : public Animal { //clase hija de clase Animal
    public:
        Carnivoro() : Animal() {
            this->alimento = "carne";
        }
        void cazar() {
            this->alimento = "a las bbys";
            cout << "Este animal esta cazando " << this->alimento << endl;
        }
};

int main() {
    Animal *a = new Animal();
    Herviboro *h = new Herviboro();
    Carnivoro *c = new Carnivoro();
    cout << "Numero de animales " << Animal::obtenerNumeroAnimales() << endl;
    a->comer();    
    h->pastar();
    c->cazar();
    delete a;
    cout << "Numero de animales " << Animal::obtenerNumeroAnimales() << endl;    
}