问题背景1
使用虚函数编写程序求球体和圆柱体的体积及表面积。由于球体和圆柱体都可以看作由圆继承而来,所以可以定义圆类 Circle 作为基类。在Circle 类中定义一个数据成员 radius 和两个虚函数 area(. 和volume()。由Circle 类派生 Sphere 类和 Column 类。在派生类中对虚函数 area()和volume()重新定义,在main函数中利用动态联编方式分别求球体和圆柱体的体积及表面积。 ## 操作步骤
- 导入标准库头文件与String库。
- 创建一个Circle基类
- 在类中写好变量的定义,数据成员定义,以及虚函数的声明。
- 派生出Sphere 类和 Column 类
- 在派生类里重新定义虚函数
- 在主函数调用虚函数
- 输出显示
代码实现
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万元。
操作步骤
- 导入标准库头文件与String库。
- 创建一个VehicleSale基类
- 在类中写好变量的定义,以及纯虚函数的声明。
- 由VehicleSale类派生出SUVSale和CarSale两个类
- 派生类中写好虚函数的价格计算
- 在主函数中调用
- 输出显示
代码实现
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; };
|