#include <QtCore/QCoreApplication>
#include <QDebug>
class Vehicle
{
public:
virtual double GetBaseDiscountRate(){
return 0.03;
}
};
class Benz : public Vehicle
{
public:
virtual double GetBaseDiscountRate(){
return 0.06;
}
};
class Sales
{
public:
virtual double GetDiscountRate(Vehicle& v)
{
return v.GetBaseDiscountRate();
}
virtual double GetDiscountRate(Benz& v)
{
return v.GetBaseDiscountRate();
}
};
class SalesManager : public Sales
{
public:
virtual double GetDiscountRate(Vehicle& v)
{
return v.GetBaseDiscountRate();
}
virtual double GetDiscountRate(Benz& v)
{
return v.GetBaseDiscountRate() * 1.1;
}
};
int main1(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Vehicle& v = Vehicle();
Vehicle& b = Benz();
Sales *pSales = new Sales();
qDebug() << pSales->GetDiscountRate(v) << ":" << pSales->GetDiscountRate(b);
Sales *pSales1 = new SalesManager();
qDebug() << pSales1->GetDiscountRate(v) << ":" << pSales1->GetDiscountRate(b);
return a.exec();
}
class Vehicle_R {
public:
virtual double GetBaseDiscountRate() {
return 0.03;
}
virtual double GetManagerDiscountRate() {
return 0.06;
}
};
class Benz_R : public Vehicle_R {
public:
virtual double GetBaseDiscountRate() {
return 0.06;
}
virtual double GetManagerDiscountRate() {
return 0.066;
}
};
class Sales_R {
public:
virtual double GetBaseDiscountRate(Vehicle_R& v)
{
return v.GetBaseDiscountRate();
}
};
class ManagerSales_R : public Sales_R {
public:
virtual double GetBaseDiscountRate(Vehicle_R& v)
{
return v.GetManagerDiscountRate();
}
};
int main(int argc, char* argv[])
{
QCoreApplication a(argc, argv);
Vehicle_R& v = Vehicle_R();
Benz_R& benz = Benz_R();
Sales_R *pSales = new Sales_R();
ManagerSales_R *pManager = new ManagerSales_R();
qDebug() << pSales->GetBaseDiscountRate(v);
qDebug() << pSales->GetBaseDiscountRate(benz);
qDebug() << pManager->GetBaseDiscountRate(v);
qDebug() << pManager->GetBaseDiscountRate(benz);
return a.exec();
}