es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Palabra clave “new” en C++ para herencia con diferentes tipos.

Recientemente comencé a aprender OOP. Perdón si esta es una pregunta de principiante. Mi pregunta es, supuse que la palabra clave “new” se usa solo con tipos de datos iguales, como:

char* p = new char; // O
int* myArr = new int[i] //etc...

Mientras estudiaba herencia y funciones virtuales, me encontré con lo siguiente:

#include <iostream>

using namespace std;
class Human {
public:
    virtual void className() {
        cout << "Human" << endl;
    }
};
class Asian : public Human {
public:
    void className() {
        cout << "Asian" << endl;
    }
};
int main() {
    Human* h1 = new Asian(); 
    h1->className();
}

En la función principal, inicializamos el puntero con la clase base y luego está la clase derivada después de la palabra clave “new”. ¿Qué representan estos 2 tipos de datos y cómo se supone que debo usarlos?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    En el código dado, estamos declarando una clase base “Humano” y una clase derivada “Asiático” heredada de la clase base. La función virtual “nombreClase()” se sobrescribe en la clase derivada “Asiático”.

    Ahora, pasando a la función principal, estamos utilizando el operador “new” para asignar memoria para el objeto de la clase derivada “Asiático” y luego asignando la dirección del objeto al puntero de la clase base “Humano”. Esto se realiza utilizando el concepto de conversión de punteros donde el objeto de la clase derivada puede ser apuntado por el puntero de la clase base.

    El tipo de dato del puntero “h1” es del tipo de la clase base “Humano”. El tipo de dato del objeto creado utilizando el operador “new” es del tipo de la clase derivada “Asiático”. Este concepto se llama polimorfismo en la programación orientada a objetos.

    Por lo tanto, podemos usar el puntero de la clase base para llamar a los métodos de la clase derivada que se sobrescriben en la clase derivada. En este caso, se llama al método “nombreClase()” de la clase “Asiático”.

    En resumen, la palabra clave “new” en C++ se utiliza para asignar memoria dinámicamente, independientemente de los tipos de datos. Se utiliza para crear objetos y devolver sus direcciones, que se pueden almacenar en punteros. Los conceptos de herencia y polimorfismo utilizan esto para crear y manipular objetos de clases derivadas de una clase base, utilizando los punteros de la clase base.

Comments are closed.