Konstruktory klas, dziedziczenie

0
 
#include <iostream>

using namespace std;

    class IAnimal
    {
    protected:
        int m_Age;
        double m_Weight;
    public:
        int Get_Age()           const       {return m_Age;}
        void Set_Age(int age)               {m_Age = age;}
        double Get_Weight()      const       {return m_Weight;}
        void Set_Weight(double weight)       {m_Weight = weight;}
        virtual void Move() = 0;

//=============================

        IAnimal()                           {m_Age = m_Weight = 0;}
        IAnimal(int age, double weight)      {m_Age = age; m_Weight = weight;}
        virtual ~IAnimal(){};
    };

    class CBird : public IAnimal
    {
    public:
        void Move()                         {cout << "JA LATAM !!!\n";}
        CBird(int age, double weight)       {m_Age = age; m_Weight = weight;}
    };

    class CDog : public IAnimal
    {
    public:
        CDog(int age, double weight)        {m_Age = age; m_Weight = weight;}
        void Move()                         {cout << "JA BIEGAM !!!\n";}
    };


int main()
{
    IAnimal * p_animal = new CDog(5, 5.0);
    p_animal->Move();
    cout << p_animal->Get_Age() << endl;;
    cout << p_animal->Get_Weight() << endl;
    delete p_animal;
}

Mam takie pytanie, czy jest możliwość żeby podczas tworzenia obiektu klasy CDog lub CBird użyć konstruktora z parametrami z klasy bazowej IAnimal
zamiast tworzenia w nich osobnych konstruktorów? Jeśli tak to w jaki sposób.

Pozdrawiam :)

2
CDog(int age, double weight) : IAnimal(age, weight) {}
2

Tak, jest. W C++11 możesz odziedziczyć konstrutkor.

    class CBird : public IAnimal
    {
    public:
        using IAnimal::IAnimal;             // <- tutaj
        void Move()                         {cout << "JA LATAM !!!\n";}
    };

http://ideone.com/iv7Dbg

Pamiętaj, że to ma sens tylko, jeżeli klasa pochodna nie ma żadnych nowych składników, które trzeba by zainicjalizować (chyba, że można to zrobić za pomocą in class member initializer).

1 użytkowników online, w tym zalogowanych: 0, gości: 1