#include <iostream>
class Fruit{
public:
virtual float totalCostPrice() const = 0;
virtual float totalSellPrice() const = 0;
virtual float netProfit() const = 0;
};
class Fruit_PI : virtual public Fruit {
protected:
int m_inventory;
public:
Fruit_PI( int num) : m_inventory(num) {}
virtual float netProfit() const { return totalSellPrice() - totalCostPrice(); }
};
class Apple : virtual public Fruit, private Fruit_PI {
private:
float m_unitCostPrice;
float m_unitSellPrice;
public:
Apple(int num, float unitCostPrice, float unitSellPrice) :
Fruit_PI(num),
m_unitCostPrice(unitCostPrice),
m_unitSellPrice(unitSellPrice) {}
virtual float totalCostPrice() const { return m_inventory * m_unitCostPrice; }
virtual float totalSellPrice() const { return m_inventory * m_unitSellPrice;}
};
class Orange : virtual public Fruit, private Fruit_PI {
private:
float m_unitCostPrice;
float m_unitSellPrice;
public:
Orange(int num, float unitCostPrice, float unitSellPrice) :
Fruit_PI(num),
m_unitCostPrice(unitCostPrice),
m_unitSellPrice(unitSellPrice) {}
virtual float totalCostPrice() const { return m_inventory * m_unitCostPrice; }
virtual float totalSellPrice() const { return m_inventory * m_unitSellPrice;}
};
void print_net_profit(const Fruit & fruit)
{
std::cout << "Net profit at current prices = $ " << fruit.netProfit() << std::endl;
}
int main()
{
Apple apple(100, 4.00, 4.25);
Orange orange(50, 7.00, 7.25);
print_net_profit(apple);
print_net_profit(orange);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgRnJ1aXR7CnB1YmxpYzoKICB2aXJ0dWFsICAgZmxvYXQgICB0b3RhbENvc3RQcmljZSgpIGNvbnN0ID0gMDsKICB2aXJ0dWFsICAgZmxvYXQgdG90YWxTZWxsUHJpY2UoKSBjb25zdCA9IDA7CiAgdmlydHVhbCBmbG9hdCBuZXRQcm9maXQoKSBjb25zdCA9IDA7Cn07CgpjbGFzcyBGcnVpdF9QSSA6IHZpcnR1YWwgcHVibGljIEZydWl0IHsKcHJvdGVjdGVkOgogIGludCBtX2ludmVudG9yeTsKcHVibGljOgogIEZydWl0X1BJKCBpbnQgbnVtKSA6IG1faW52ZW50b3J5KG51bSkge30KCiAgdmlydHVhbCBmbG9hdCBuZXRQcm9maXQoKSBjb25zdCB7IHJldHVybiB0b3RhbFNlbGxQcmljZSgpIC0gdG90YWxDb3N0UHJpY2UoKTsgfQp9OwoKY2xhc3MgQXBwbGUgOiB2aXJ0dWFsIHB1YmxpYyBGcnVpdCwgcHJpdmF0ZSBGcnVpdF9QSSB7CnByaXZhdGU6CiAgZmxvYXQgbV91bml0Q29zdFByaWNlOwogIGZsb2F0IG1fdW5pdFNlbGxQcmljZTsKcHVibGljOgogIEFwcGxlKGludCBudW0sIGZsb2F0IHVuaXRDb3N0UHJpY2UsIGZsb2F0IHVuaXRTZWxsUHJpY2UpIDogCiAgICBGcnVpdF9QSShudW0pLAogICAgbV91bml0Q29zdFByaWNlKHVuaXRDb3N0UHJpY2UpLAogICAgbV91bml0U2VsbFByaWNlKHVuaXRTZWxsUHJpY2UpIHt9CgogIHZpcnR1YWwgZmxvYXQgdG90YWxDb3N0UHJpY2UoKSBjb25zdCB7IHJldHVybiBtX2ludmVudG9yeSAqIG1fdW5pdENvc3RQcmljZTsgfQoKICB2aXJ0dWFsIGZsb2F0IHRvdGFsU2VsbFByaWNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnZlbnRvcnkgKiBtX3VuaXRTZWxsUHJpY2U7fQp9OwoKY2xhc3MgT3JhbmdlIDogdmlydHVhbCBwdWJsaWMgRnJ1aXQsIHByaXZhdGUgRnJ1aXRfUEkgewpwcml2YXRlOgogIGZsb2F0IG1fdW5pdENvc3RQcmljZTsKICBmbG9hdCBtX3VuaXRTZWxsUHJpY2U7CnB1YmxpYzoKICBPcmFuZ2UoaW50IG51bSwgZmxvYXQgdW5pdENvc3RQcmljZSwgZmxvYXQgdW5pdFNlbGxQcmljZSkgOiAKICAgIEZydWl0X1BJKG51bSksCiAgICBtX3VuaXRDb3N0UHJpY2UodW5pdENvc3RQcmljZSksCiAgICBtX3VuaXRTZWxsUHJpY2UodW5pdFNlbGxQcmljZSkge30KCiAgdmlydHVhbCBmbG9hdCB0b3RhbENvc3RQcmljZSgpIGNvbnN0IHsgcmV0dXJuIG1faW52ZW50b3J5ICogbV91bml0Q29zdFByaWNlOyB9CgogIHZpcnR1YWwgZmxvYXQgdG90YWxTZWxsUHJpY2UoKSBjb25zdCB7IHJldHVybiBtX2ludmVudG9yeSAqIG1fdW5pdFNlbGxQcmljZTt9Cn07Cgp2b2lkIHByaW50X25ldF9wcm9maXQoY29uc3QgRnJ1aXQgJiBmcnVpdCkKewogIHN0ZDo6Y291dCA8PCAiTmV0IHByb2ZpdCBhdCBjdXJyZW50IHByaWNlcyA9ICQgIiA8PCBmcnVpdC5uZXRQcm9maXQoKSA8PCBzdGQ6OmVuZGw7Cn0KCmludCBtYWluKCkKewogIEFwcGxlIGFwcGxlKDEwMCwgNC4wMCwgNC4yNSk7CiAgT3JhbmdlIG9yYW5nZSg1MCwgNy4wMCwgNy4yNSk7CiAKICBwcmludF9uZXRfcHJvZml0KGFwcGxlKTsKICBwcmludF9uZXRfcHJvZml0KG9yYW5nZSk7Cn0K