C++|作业训练-虚函数

问题背景1

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

操作步骤

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

代码实现

#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. 输出显示

代码实现

#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;
};

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值