-2
class Transport{
private:
    int weight; // Member variable (Private)
    int capacity; // Member variable (Private)
    int speed; // Member variable (Private)
public:
    Transport(int aWeight, int aCapacity, int aSpeed) { // Default constructor
        if(aWeight > 0) { // Perform validation at the time of creating object
            weight = aWeight;
        } else {
            weight = 0;
        }

        if(aCapacity > 0) { // Perform validation at the time of creating object
            capacity = aCapacity;
        } else {
            capacity = 0;
        }

        if(aSpeed > 0) { // Perform validation at the time of creating object
            speed = aSpeed;
        } else {
            speed = 0;
        }
    }
    void carryGoods(); // Member function (Public) -> Each transport has carrying goods functionality.

};

class LandTransport : public Transport{ // Inherit transport class
private:
    char * transportationMode; // Member variable (Private)
    char * vehicleType; // Member variable (Private)
public:
    LandTransport(char * aTransporationMode, char * aVehicleType) {
        transportationMode = new char[strlen(aTransporationMode)+1];
        strcpy(transportationMode, aTransporationMode);

        vehicleType = new char[strlen(aVehicleType)+1];
        strcpy(vehicleType, aVehicleType);
    }
};

Can you please describe, what is wrong here and what is best practice?

zarpio
  • 10,380
  • 8
  • 58
  • 71

1 Answers1

1

Your derived class has a constructor that doesn't provide the parameters of its parent's constructor.

LandTransport(char * aTransporationMode, char * aVehicleType)

should be like below (for example):

LandTransport(char * aTransporationMode, char * aVehicleType) : Transport(0,0,0)
                                                              ^^^^^^^^^^^^^^^^^^
masoud
  • 55,379
  • 16
  • 141
  • 208