Класс с указателем на базовый класс, содержащий виртуальный метод - PullRequest
0 голосов
/ 10 ноября 2019

Это простая программа для расчета заработной платы работника на основе типа контракта. В рабочем классе у меня есть указатель на контракт. Я в основном заявляю, указывает ли он на контракт1 или контракт2. Но мой метод в работнике, который должен показать мне, сколько денег зарабатывает работник, не работает, программа завершается со случайными значениями. Я попытался скомпилировать его в visual studio, и там все выглядит нормально. Не могли бы вы объяснить, в чем проблема с gcc и dev c ++?

В основном у меня есть:

Contract *au=new Contract1(100);
    Worker ap("worker1",au);
    cout<<ap.salary()<<endl;

, затем в моем файле worker.h:

class Contract{
    protected:
        double money;
    public:
        Contract(double money):money(money){};
        virtual double getSalary()=0;

};

class Contract1:public Contract{
    public:
        Contract1(double money):Contract(money){};
        double getSalary(){
            return 0.9*money;
        }
};

class Contract2:public Contract{
    public:
        Contract2(double money):Contract(money){};
        double getSalary(){
        return 0.8*money;
        }

};

class Worker{
    protected:
        string name;
        Contract *contract;
    public:
        Worker(string n, Contract *c):name(n),contract(c){};
        double salary(){
            return contract->getSalary();
        };

};
...