C++|作业训练(5)

问题背景1

使用虚函数编写程序求球体和圆柱体的体积及表面积。由于球体和圆柱体都可以看作由圆继承而来,所以可以定义圆类 Circle 作为基类。在Circle 类中定义一个数据成员 radius 和两个虚函数 area(. 和volume()。由Circle 类派生 Sphere 类和 Column 类。在派生类中对虚函数 area()和volume()重新定义,在main函数中利用动态联编方式分别求球体和圆柱体的体积及表面积。 ## 操作步骤

  1. 导入标准库头文件与String库。
  2. 创建一个Circle基类
  3. 在类中写好变量的定义,数据成员定义,以及虚函数的声明。
  4. 派生出Sphere 类和 Column 类
  5. 在派生类里重新定义虚函数
  6. 在主函数调用虚函数
  7. 输出显示

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#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万元。

操作步骤

  1. 导入标准库头文件与String库。
  2. 创建一个VehicleSale基类
  3. 在类中写好变量的定义,以及纯虚函数的声明。
  4. 由VehicleSale类派生出SUVSale和CarSale两个类
  5. 派生类中写好虚函数的价格计算
  6. 在主函数中调用
  7. 输出显示

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#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;
};