mercredi 5 février 2020

What's the difference between delegating base ctor and inherit base ctor

I can't get the diffrence between delegating base ctor in derived class and inheriting base ctor in derived class.

For example I have these 2 classed:

class Transport {
private:
    std::string name;
public:
    Transport() : Transport("") {
        std::cout << "Paramless Transport ctor" << std::endl;
    }

    explicit Transport(std::string name) : name{name} {
        std::cout << "Transport ctor" << std::endl;
    }

    Transport(const Transport &source)
            : Transport{source.name} {
        std::cout << "Transport CCtor" << std::endl;
    }

    ~Transport() {
        std::cout << "Transport destructor for " << get_name() << std::endl;
    }

    std::string get_name() {
        return this->name;
    }

    void set_name(std::string name) {
        this->name = name;
    }

};
class Ship : public Transport {
private:
    float max_speed;
public:

    Ship() : max_speed{0}, Transport{""} {
        std::cout << "Paramless Ship ctor" << std::endl;
    }

    explicit Ship(std::string name) : Transport{name}, max_speed{0} {
        std::cout << "Ship 1 param ctor" << std::endl;
    }

    Ship(std::string name, float max_speed) : Transport{name}, max_speed{max_speed} {
        std::cout << "Ship 2 param ctor" << std::endl;
    }

    Ship(const Ship &source) : Transport{source}, max_speed{source.max_speed} {
        std::cout << "Ship CCtor" << std::endl;
    }

    ~Ship() {
        std::cout << "Ship destructor for " << get_name() << std::endl;
    }

    float get_max_speed() {
        return this->max_speed;
    }

    void set_max_speed(float speed) {
        this->max_speed = speed;
    }

};

As far as I'm concerned here in Ship class I delegate base class ctors. If I will add using Transport::Transport in Ship class.This class will Inherit base class ctors and statements like Transport{name}, Transport{" "},Transport{"source"} etc won't be nessesary in Ship class? Can someone explain this to me?

Edit: Also does it make difference to write Ship() : max_speed{0}, Transport{""} or Ship() : Transport{""}, max_speed{0}

Aucun commentaire:

Enregistrer un commentaire