Define an abstract class Profit with a text description, a name of an employer, a method providing the number of Profits available and the pure virtual method getGain computing the real gain of a profit.
Define the following classes inherited from the Profit:
• ChargedProfit representing the profit with a single income value and a cost of outcomes (the gain of the profit is the subtraction of the two values),
• TaxedProfit representing the Profit with a single income value and a percent of taxes (the gain of the profit is the income reduced by the percentage),
• MultiProfit representing the Profit with a single income value gained repeatedly (the gain of the profit is the multiplication of the income value).
Override, for each of the above classes, the virtual method getGain, making it to return the real gain of a Profit of the given class. Implement all the constructors, destructors, getters, setters and exceptions which make the functionality of the classes complete, and all the other methods and exceptions necessary to run the
code provided below.
Define the class Revenue with a year number, a maximal gains and a dynamic list of the profits received.
Implement the following public methods of the class:
• a one enabling to add a new profit of an arbitrary type to the revenue list on the first position of the list (with the control of the maximal gain, OverflowError should be thrown if the maximal gain could be exceeded),
• a one enabling to add a new profit of an arbitrary type to the revenue list on the last position of the list (with the control of the maximal gain, too),
• a one enabling to remove the last profit from the revenue (throwing the EmptyError exception if the list is empty),
• a one enabling to remove all the profits from the list,
• a method returning the summary gain of all the profits in the revenue.
Overload the indexing operator ([]) for the Revenue to have a direct access to the task on the particular position in the list (throwing the IndexError exception if it doesn't exist). Overload the shift-left operator (<<) printing the data of the revenue and the details of all the profits. Add all the other members which are
necessary to make the functionality of the class complete or are required to run the code below.
Write a program which tests all the class capabilities, in particular the following code should be enabled:
Revenue calc(2014, 10000); cout << Profit::count(); try {
calc.addFirst(new ChargeProfit("sale", "Allegro", 8000, 6000)); calc.addFirst(new TaxedProfit("wages", "Boss", 9000, 18)); calc.addLast(new MultiProfit("tutoring", "Johny", 100, 6)); calc.addLast(new TaxedProfit("project", "UE", 3000, 30)); } catch(Revenue::OverflowError &e) {
cout << e.what(); }
cout << calc;
cout << Profit::count(); cout << calc.summaryGain() << endl; calc.removeLast();
cout << Profit::count(); cout << calc.summaryGain() << endl; try {
cout << calc[1].getGain() << endl; cout << calc[4].getGain() << endl; } catch(Revenue::IndexError &e) {
cout << e.what(); }
calc.clear();
cout << Profit::count();
What I have tried:
i tried this. it is belongs to inherieted class. in which i need to connect header file and .cpp file with project.
there would be two header file and two .cpp file and connected to peoject which contain main.cpp