问题背景1
使用虚函数编写程序求球体和圆柱体的体积及表面积。由于球体和圆柱体都可以看作由圆继承而来,所以可以定义圆类 Circle 作为基类。在Circle 类中定义一个数据成员 radius 和两个虚函数 area(. 和volume()。由Circle 类派生 Sphere 类和 Column 类。在派生类中对虚函数 area()和volume()重新定义,在main函数中利用动态联编方式分别求球体和圆柱体的体积及表面积。
操作步骤
- 导入标准库头文件与String库。
- 创建一个Circle基类
- 在类中写好变量的定义,数据成员定义,以及虚函数的声明。
- 派生出Sphere 类和 Column 类
- 在派生类里重新定义虚函数
- 在主函数调用虚函数
- 输出显示
代码实现
#include<iostream>
#include<cmath>
#include<string>
float const PI = 3.1415926;
using namespace std;
class Circle {
public:
virtual float area() = 0;
virtual float volume() = 0;
private:
float radius;
};
class Sphere :public Circle {
public:
Sphere() { radius = 0; }
Sphere(float r) { radius = r; }
virtual float area() { return 4 * PI * radius * radius; }
virtual float volume() { return (4.0 / 3) * PI * radius * radius * radius; }
private:
float radius;
};
class Column :public Circle {
public:
Column() { radius = 0;h = 0; }
Column(float r, float h) :radius(r), h(h) {};
virtual float area() { return (2*PI*radius*radius+2*PI*radius*h); }
virtual float volume() { return h*PI*radius*radius; }
private:
float radius;
float h;
};
int main() {
float r,h;
cout << "请输入半径与高:" << endl;
cin >> r >> h;
Sphere sp(r);
Column co(r, h);
cout << "边长为"<<r<<"的球的表面积、体积为:" << sp.area()<<"," << sp.volume() << endl;
cout << "边长为" << r << ",高为"<<h<<"的圆柱的表面积、体积为:" <<co.area() <<","<< co.volume() << endl;
};
问题背景2
某汽车4S店销售SUV和家用轿车两种车型,两种车型的销售策略不一样,其中,SUV按照厂方指导价打85折销售(即按照厂方指导价的85%销售),家用轿车按照厂方指导价直接降价1.8万元销售。请构造一个VehicleSale抽象基类,其中定义一个纯虚函数SalePrice计算实际销售价格。
由VehicleSale类派生出SUVSale和CarSale两个类,要求这两个类用SalePrice虚函数的形式,用多态实现不同车型的不同销售价格的计算,并输出计算结果。
算例:
SUV厂方指导价格为:22.75万元,折扣为85折。
家用轿车厂方指导价格为:21.8万元,直接降价为1.8万元。
操作步骤
- 导入标准库头文件与String库。
- 创建一个VehicleSale基类
- 在类中写好变量的定义,以及纯虚函数的声明。
- 由VehicleSale类派生出SUVSale和CarSale两个类
- 派生类中写好虚函数的价格计算
- 在主函数中调用
- 输出显示
代码实现
#include<iostream>
#include<string>
using namespace std;
class VehicleSale {
public:
virtual float SalePrice() = 0;
float price;
};
class SUVSale :public VehicleSale {
public:
virtual float SalePrice() { return 0.85 * price; };
float price;
};
class CarSale :public VehicleSale {
public:
virtual float SalePrice() { return 1.8; };
float price;
};
int main() {
SUVSale suv;
CarSale car;
float cp, sp;
cout << "请输入SUV厂方指导价格:" << endl;
cin >> cp;
cout << "请输入家用轿车厂方指导价格:" << endl;
cin >> sp;
suv.price = sp;
car.price = cp;
cout << "85折之后SUV的价格:" << suv.SalePrice() << "万元" << endl;
cout << "家用轿车直降之后的价格:" << car.SalePrice() <<"万元" << endl;
};