Ошибка полиморфизма C ++ - не позволяет мне создать дочерний объект из родительского типа - PullRequest
0 голосов
/ 01 декабря 2019

У меня есть класс Simulation, который должен генерировать 20 клиентов. У меня есть класс Customer, определенный в коде, который не показан. У меня также определены классы RegularCustomer и PremiumCustomer (также не показаны).

RegularCustomer и PremiumCustomer являются производными от абстрактного класса Customer. В моем классе симуляции я должен сгенерировать 10 RegularCustomer и 10 PremiumCustomer. Прямо сейчас я просто концентрируюсь на создании 10 RegularCustomer.

Вот мой код для класса Simulation:

class Simulation
{

private:
    vector<RegularCustomer> regCustList;

public:
    void printResult() {
        cout << "Simulation Run" << endl;

        for (int i = 0; i < 10; i++) {
            RegularCustomer regCust = generateCustomer(1);
            regCustList.push_back(regCust);
        }
    }

    Customer* generateCustomer(int flag) {
        if (flag == 1) {
            return new RegularCustomer();
        }
        else {
            return new PremiumCustomer();
        }
    }
};

Как вы можете видеть, метод generateCustomer () имеет тип возврата Customer. Это потому, что мне нужен тот же метод , чтобы иметь возможность возвращать оба дочерних типа Customer. Однако я получаю эту ошибку:

E0415   no suitable constructor exists to convert from "Customer *" to 
"RegularCustomer"

Это сбивает с толку, так как я думал, что полиморфизм позволяет создавать дочерние классы из родительского типа. Например:

Parent parent = new Child();

Хотя это можно назвать теневым, я все время смешиваю эти два. Но все равно должно работать независимо.

Любые предложения будут отличными, спасибо!

...