Member 14145272 Ответов: 2

Пожалуйста , решите этот вопрос, который относится к объектно - ориентированному программированию


Определите абстрактный класс прибыли с текстовым описанием, именем работодателя, методом, обеспечивающим количество доступных прибылей, и чисто виртуальным методом getGain, вычисляющим реальную прибыль от прибыли.

Определите следующие классы, унаследованные от прибыли:
• ChargedProfit представляет собой прибыль с единым значением дохода и стоимостью результатов (прибыль от прибыли представляет собой вычитание двух значений),
• Налогооблагаемая прибыль, представляющая собой прибыль с единым значением дохода и процентом налогов (прирост прибыли-это доход, уменьшенный на процент),
• Мультиприбыль, представляющая собой прибыль с одним значением дохода, полученным многократно (прирост прибыли-это умножение значения дохода).

Переопределите, для каждого из вышеперечисленных классов, виртуальный метод getGain, заставив его возвращать реальную прибыль от прибыли данного класса. Реализуйте все конструкторы, деструкторы, геттеры, сеттеры и исключения, которые делают функциональность классов полной, а также все другие методы и исключения, необходимые для запуска класса.
код приведен ниже.

Определите доход класса с указанием номера года, максимальной прибыли и динамического списка полученной прибыли.

Реализуйте следующие открытые методы класса:
• тот, который позволяет добавить новую прибыль произвольного типа в список доходов на первой позиции списка (при контроле максимальной прибыли должен быть выброшен OverflowError, если максимальная прибыль может быть превышена),
• тот, который позволяет добавить новую прибыль произвольного типа в список доходов на последней позиции списка (с контролем также максимальной прибыли),
• один, позволяющий удалить последнюю прибыль из выручки (выбрасывая исключение EmptyError, если список пуст),
• один, позволяющий удалить всю прибыль из списка,
• метод, возвращающий суммарную прибыль от всех прибылей в выручке.

Перегрузите оператор индексирования ([]), чтобы доход имел прямой доступ к задаче на определенной позиции в списке (вызывая исключение IndexError, если оно не существует). Перегрузите оператор shift-left (<<) печатью данных о выручке и подробностях всех прибылей. Добавьте все остальные члены, которые являются
необходимо сделать функциональность класса полной или требуется выполнить приведенный ниже код.

Напишите программу, которая тестирует все возможности класса, в частности должен быть включен следующий код:
Revenue calc(2014, 10000); //max=10000
cout << Profit::count(); //0
try {
 calc.addFirst(new ChargeProfit("sale", "Allegro", 8000, 6000)); //8000-6000
 calc.addFirst(new TaxedProfit("wages", "Boss", 9000, 18)); //18% of taxes
 calc.addLast(new MultiProfit("tutoring", "Johny", 100, 6)); //6x100
 calc.addLast(new TaxedProfit("project", "UE", 3000, 30)); //30% of taxes
} catch(Revenue::OverflowError &e) {
 cout << e.what(); //gain for 'project' is too large
}
cout << calc;
//Revenue 2014, maximal gain: 10000.00, total gain: 9980.00:
//1. wages (Boss), gain: 7380.00
//2. sale (Allegro), gain: 2000.00
//3. tutoring (Johny), gain: 600.00
cout << Profit::count(); //3
cout << calc.summaryGain() << endl; //9980.00
calc.removeLast();
cout << Profit::count(); //2
cout << calc.summaryGain() << endl; //9380.00
try {
 cout << calc[1].getGain() << endl; //7380.00
 cout << calc[4].getGain() << endl; //IndexError exception
} catch(Revenue::IndexError &e) {
 cout << e.what(); //item no. 4 not found
}
calc.clear();
cout << Profit::count(); //0


Что я уже пробовал:

я попробовал это сделать. он принадлежит к наследуемому классу. в котором мне нужно соединить заголовочный файл и файл .cpp с проектом.
там было бы два заголовочных файла и два файла .cpp, подключенных к peoject, которые содержат main.cpp

Rick York

Я не вижу причин, по которым требуются два заголовочных файла и два исходных файла. Класс Profit и его производные могут быть все в одном заголовке, а реализация всех классов может быть в одном файле .cpp, если вы хотите сделать это таким образом.

Тебе нужно постараться немного сильнее. Это очень простой материал C++, который задается, и вы должны быть в состоянии сделать все это, если вы вообще надеетесь прогрессировать. Если вы не надеетесь на прогресс, зачем кому - то еще тратить свое время?

2 Ответов

Рейтинг:
2

Rick York

"Определите абстрактный класс прибыли с текстовым описанием, именем работодателя, методом, обеспечивающим количество доступных прибылей, и чисто виртуальным методом getGain, вычисляющим реальную прибыль от прибыли."

Вот объявление базового класса :

class Profit
{
public:
    std::string  m_description;
    std::string  m_employer;

public:
    static int count();
    double     getGain() = 0;   // derivations must implement this
};
Я оставлю все остальное тебе, потому что ты должен это сделать. Вы ничему не научитесь, если кто-то другой сделает это за вас.

Обратите внимание, что эта декларация не является полной. Там нет определенного конструктора, так что вам нужно будет добавить его. Вы должны быть в состоянии понять, как это выглядит, по тому, как выглядят конструкторы для производных классов, и вы можете увидеть их, посмотрев на требование кода, которое вы опубликовали.


Рейтинг:
1

KarstenK

Вам нужно посетить некоторые учебные пособия, такие как Изучайте C++ чтобы решить ваши домашние задания.

Совет: установите Visual Studio и напишите четкий код. Отдельное объявление в заголовке при реализации в cpp-файлах. Используйте описательные имена.

Удачи.