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.

Constructor en doble herencia

Tengo un problema con mi constructor. Tengo la clase vehicle, luego hice la clase “motorVehicle” que hereda de “vehicle” y luego quiero hacer la clase “motorcycle” que hereda de la clase “motorVehicle” y no puedo hacer mi constructor por que tengo un error:
La clase “vehicle” y “motorVehicle” no han sido modificadas por mí y la clase “motorcycle” está en 2 opciones, ninguna de estas opciones funciona pero te daré ambas. Por cierto, los problemas son (Primera opción): no hay constructor coincidente para la inicialización de ‘motorVehicle’ y con la segunda opción se espera ; después de la expresión y se espera un nombre de miembro o ; después de los currectores de declaración

class vehicle {
public:
    int numberOfWheels;
    string color;
    float vehiclePayload;
};

vehicle(): numberOfWheels{4}, color{"black"}, vehiclePayload{500}{

}

class motorVehicle : public vehicle {
public:
    float tankCapacity;
    float fuelConsumption;
    float mileage;
    float currentAmountOfFuel;
    int yearOfProduction;
    unsigned long long int vin;

    motorVehicle(): tankCapacity{30}, fuelConsumption{6}, mileage{100}, currentAmountOfFuel{10}, yearOfProduction{2021}, vin{1}, vehicle{4, "black", 500} {

    }
};

class motorcycle : public motorVehicle{
public:
    float bootSize;
    string brand;
    string model;

    motorcycle(): bootSize{500}, brand{"Ninja"}, model{"Kawasaki"}, motorVehicle{30,6,100,10,2021,1,vehicle{4, "black", 500}}{

    }
};

class motorcycle : public motorVehicle{
public:
    float bootSize;
    string brand;
    string model;

    motorcycle(): bootSize{500}, brand{"Ninja"}, model{"Kawasaki"}, motorVehicle{30,6,100,10,2021,1,vehicle{4, "black", 500}}{

    }
};
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con la primera opción es que estás tratando de inicializar el objeto motorVehicle dentro del constructor de la clase motorcycle. Sin embargo, dado que motorVehicle ya tiene su propio constructor, no debes incluirlo como parámetro al inicializarlo. En su lugar, simplemente debes llamar a su constructor por defecto de esta manera:

    motorcycle(): bootSize{500}, brand{"Ninja"}, model{"Kawasaki"}, motorVehicle{}, vehicle{4, "black", 500}{}

    Esto llamará al constructor por defecto de motorVehicle e inicializará sus valores, así como los valores de su clase padre vehicle.

    En cuanto al problema con la segunda opción, el error aparece porque olvidaste incluir la llave de apertura después de motorVehicle() al inicializarlo en el constructor de motorcycle. Debe ser así:

    motorcycle(): bootSize{500}, brand{"Ninja"}, model{"Kawasaki"}, motorVehicle{30,6,100,10,2021,1,vehicle{4, "black", 500}}, vehicle{4, "black", 500}{}

    Ten en cuenta que debes incluir tanto motorVehicle como vehicle en la lista de inicialización y separarlos con una coma. Además, no olvides incluir los valores reales con los que deseas inicializar motorVehicle.

    ¡Espero que esto ayude!

Comments are closed.