Как унаследовать от двух классов и вызвать конструктор родительского класса, из которого мне нужно сделать объект? - PullRequest
0 голосов
/ 09 мая 2020

Здравствуйте, я новичок в C ++, и я пытаюсь создать программу, в которой у вас есть объекты класса Application.

Класс приложения должен наследовать от двух классов. Класс Games и класс desktopApp. Когда я создаю свою программу, я получаю две следующие ошибки:

нет соответствующей функции для вызова 'desktopApp :: desktopApp ()

нет соответствующей функции для вызова' Games :: Games ()

У меня следующие вопросы:

Почему я получаю эти ошибки?

Как я могу вызвать конструктор родительского класса, который я хочу создать объект каждый раз?

Нужно ли мне создавать два конструктора для каждого родительского класса в классе Application?

Большое спасибо.

Код класса Games:

class Games
{
    string category;
    float price;
public:
    Games (string category, float price)
    {
        this->category = category;
        this->price = price;
    }
};

desktopApp код класса:

class desktopApp
{
    string edition;
    vector<string> ratings;
public:
    desktopApp (string edition, vector<string> ratings)
    {
        this->edition = edition;
        copy(this->ratings.begin(), this->ratings.end(), back_inserter(ratings));
    }
};

Код класса приложения:

class Application:public desktopApp, public Games
{
    string name;
public:
    Application (string name, string category, float price):Games (category, price)
    {
        this->name = name;
    }

    Application (string name, string edition, vector<string> ratings):desktopApp (edition, ratings)
    {
        this->name = name;
    }
};

Основной:

int main()
{
    Applications game1("aGame", "Violent", 45.7);
}

1 Ответ

2 голосов
/ 09 мая 2020

Имея два базовых класса A и B, класс C, который наследуется от обоих, выглядит так:

class C : public A, public B{
public:
     C(/*params*/) : A(/*params*/), B(/*params*/){/*code*/}
};

Итак, в вашем случае ваш Application должен выглядеть так :

class Application:public desktopApp, public Games
{
    string name;
public:
    Application(string edition, vector<string> ratings, string name, string category, float price) :
    desktopApp(edition,ratings),
    Games(category,price)
    {
        this->name = name;
    }

    Application(string category, float price, string name, string edition, vector<string> ratings) :
        Games(category,price),
        desktopApp(edition,ratings)
    {
        this->name = name;
    }
};
...