Я пытаюсь создать иерархию системы начисления заработной платы, и мой базовый класс всего является абстрактным классом, а все остальные унаследованные классы являются конкретными классами (классами, которые могут быть созданы). У меня есть чистая виртуальная функция earning () вмой базовый класс абстрактный сотрудник базового класса .. в производных классах предусмотрена надлежащая функциональность заработка в зависимости от типа сотрудника, чей заработок рассчитывается. У меня также есть виртуальная функция в абстрактном базовом классе, которая отображает информацию, которая переопределяется во всех производных классах. Иерархия классов выглядит следующим образом:
- сотрудник класса;
- класс комиссионныхEmployee: государственный служащий;
- класс salariedEmployee: государственный служащий;
- класс basePlusCommissionEmployee: государственный служащий
Переопределенная чистая виртуальная функция сотрудника комиссионных суммирует валовые продажи работника за неделю с ставкой комиссионного вознаграждения и должна возвращать двойную сумму.
наемного работникапереопределенная функция заработка возвращает только заработную плату, заработанную сотрудником, поскольку его / ее заработная плата является единственным заработком.
basePlusCommissionEmployee означает, что сотрудник, для которого обе функции добавляются в его / ее функцию заработка, то естьзарплата этого сотрудника и комиссия, которую сотрудник будет получать от продаж, которые он / она совершает ... проблема, с которой я сталкиваюсь, заключается в том, что когда я использую указатель базового класса, чтобы указать на объект производного класса ... динамический полиморфизм действительно реализуетсяно на дисплееФункция ormation, которая переопределена в каждом классе, я не получаю полную информацию .. она не отображает ни имя сотрудника, ни его / ее заработок. я также опубликовал изображение, которое показывает выходные данные переопределенной функции displayInformation класса наемного работника ... кроме имени и номера социального страхования, единственный дополнительный входной класс наемного работника, который запрашивает, - это зарплатаэтого сотрудника ..
#include <iostream>
#include <cstdlib>
using namespace std;
class employee
{
private:
string name;
string socialSecurityNumber;
public:
void setName(string);
string getName();
void setSSN(string);
string getSSN();
virtual double earnings() = 0;
virtual void displayInformation();
};
void employee::setName(string argName)
{
name = argName;
}
string employee::getName()
{
return name;
}
void employee::setSSN(string argSSN)
{
socialSecurityNumber = argSSN;
}
string employee::getSSN()
{
return socialSecurityNumber;
}
void employee::displayInformation()
{
cout <<"name: " <<getName()
<<"Social security number: " <<getSSN();
}
class salariedEmployee : public employee
{
private:
double salary;
public:
void setSalary(double);
double getSalary();
virtual double earnings();
virtual void displayInformation();
};
void salariedEmployee::setSalary(double argSalary)
{
salary = argSalary;
}
double salariedEmployee::getSalary()
{
return salary;
}
double salariedEmployee::earnings()
{
//we will only return salary because that is the only earning of a salaried employee
return salary;
}
void salariedEmployee::displayInformation()
{
employee::displayInformation();
cout <<"weekly salary: " <<getSalary();
}
class commissionEmployee : public employee
{
private:
double commissionRate;
double grossSales;
public:
void setCommission(double);
double getCommission();
void setGrossSales(double);
double getGrossSales();
virtual double earnings();
virtual void displayInformation();
};
void commissionEmployee::setCommission(double argCommission)
{
commissionRate = argCommission;
}
double commissionEmployee::getCommission()
{
return commissionRate;
}
void commissionEmployee::setGrossSales(double argSales)
{
grossSales = argSales;
}
double commissionEmployee::getGrossSales()
{
return grossSales;
}
double commissionEmployee::earnings()
{
return (commissionRate * grossSales);
}
void commissionEmployee::displayInformation()
{
employee::displayInformation();
cout <<"\ncommission rate: " << getCommission()
<<"\nweekly sales: " <<getGrossSales();
}
class basePlusCommissionEmployee : public commissionEmployee
{
private:
double salary;
public:
void setSalary(double);
double getSalary();
virtual double earnings();
virtual void displayInformation();
};
void basePlusCommissionEmployee::setSalary(double argSalary)
{
salary = argSalary;
}
double basePlusCommissionEmployee::getSalary()
{
return salary;
}
double basePlusCommissionEmployee::earnings()
{
return (getSalary() + commissionEmployee::earnings());
}
void basePlusCommissionEmployee::displayInformation()
{
employee::displayInformation();
commissionEmployee::displayInformation();
cout <<"salay: " <<salary;
cout <<endl;
}
int main()
{
int choice;
double salary;
string name, SSN;
cout <<"choose\n1)salaried employee\n2)commission employee\n3)base plus salaried
employee\nenter: ";
cin >> choice;
cout <<"enter name: ";
cin >> name;
cout <<"enter SSN: ";
cin >>SSN;
if(choice == 1)
{
employee *pointerObj = new salariedEmployee;
salariedEmployee obj;
obj.setName(name);
obj.setSSN(SSN);
cout <<"enter weekly salary: ";
cin >> salary;
obj.setSalary(salary);
system("cls");
cout <<"total earning of this employee: " <<pointerObj->earnings();
cout <<endl;
pointerObj->displayInformation();
}
}