Это простая программа для расчета заработной платы работника на основе типа контракта. В рабочем классе у меня есть указатель на контракт. Я в основном заявляю, указывает ли он на контракт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();
};
};