《面向对象程序设计》第八次作业
设计一个表示圆柱的类Cylinder,其成员包括底面半径double * radius ,
高double * high为指针变量,设计相应成员函数,实现下列功能:
① 构造函数设置半径和高(默认为1)。
② 复制构造函数用老对象生成新对象。
③计算并返回圆柱体的表面积。
④ 计算并返回圆柱的体积(Π取3.14)。
⑤ 析构函数释放动态分配的长和宽
编制主程序应用指针建立对象测试类。
输入格式
第一行输入半径
第二行输入高
输出格式
第一行输出体积
第二行输出表面积
input 1
5 4
output 1
314
282.6
//5.30
#include <iostream>
#include <iomanip>
using namespace std;
class Cylinder{
private:
double *radius,*high;
public:
Cylinder(double r=1.0,double h=1.0){
radius =new double(r);
high = new double(h);
}
~Cylinder(){
delete radius;
delete high;
}
Cylinder(const Cylinder &other){
//注意深拷贝
radius=new double(*(other.radius));
high=new double (*(other.high));
}
double area(){
return 2*3.14*(*radius)*(*high)+2*3.14*(*radius)*(*radius);
}
double volume(){
return 3.14*(*radius)*(*radius)*(*high);
}
};
int main(){
double r,h;
cin>>r>>h;
//指针动态调用对象
Cylinder *c1= new Cylinder(r,h);
cout<<"volume:"<<c1->volume()<<endl;
cout<<"area:"<<c1->area()<<endl;
return 0;
}
商店销售某一商品,商店每天公布统一的折扣(discount)今天统一折扣为9折。
同时允许销售人员在销售时灵活掌握售价(price),在此基础上,对一次购10件以上者,
还可以享受9.8折优惠。销货件数(quantity) 浮点型 销货单价(price )
请编程序,计算出当日此商品的总销售款sum以及商品的平均售价。
要求用静态数据成员和静态成员函数。
提示:将折扣discount,总销售款sum和商品销售总件数n声明为静态数据成员,
再定义静态成员函数average(求平均售价)和display(输出结果)。
输入格式
第一行给出一个整数n;
后n行给出每次的买入数量及单价
输出格式
第一行输出销售总额
第二行给出平均售价
若输入只有一个0,只需输出“you can go home”
更改后题目
商店销售某一商品,商店每天公布统一的折扣(discount),今天统一折扣为 9 折。
同时允许销售人员在销售时灵活掌握售价(price),在此基础上,对一次购买 10 件以上者,还可以额外享受 9.8 折优惠。
请编写程序,计算出当日此商品的总销售款 sum 以及商品的平均售价。
要求:
使用静态数据成员和静态成员函数实现
将折扣 discount、总销售款 sum 和商品销售总件数 totalQuantity 声明为静态数据成员
定义静态成员函数 average(求平均售价)和 display(输出结果)
输入格式:
第一行给出一个整数 m,表示销售记录的条数
接下来 m 行,每行给出两个数:本次购买的数量(整数)和本次的销售单价(浮点数)
输出格式:
若输入的 m 为 0,只需输出一行:"you can go home"
否则:
第一行输出销售总额,保留 3 位小数
第二行输出平均售价,保留 5 位小数
input 1
4
1 9
2 8.8
12 8.4
20 6.9
output 1
234.562
6.70176
//5.30
#include <iostream>
#include <iomanip>
using namespace std;
class Product {
private:
int num; // 本次购买的数量
double price; // 本次的销售单价
static double discount;
static double sum;
static int totalQuantity; // 件数用 int 更合理
public:
Product(int n, double p) {
num = n;
price = p; // 【修复】记得把传入的单价赋值给成员变量
double curdiscount = discount;
if (num > 10) { // 【注意】10件"以上"通常指 > 10
curdiscount *= 0.98; // 【修复】9.8折是乘以0.98,不是9.8
}
// 就像你说的,这里 curmoney 只是个临时打工仔
double curmoney = num * price * curdiscount;
sum += curmoney;
totalQuantity += num;
}
static double average() {
if (totalQuantity == 0) {
return 0.0;
}
return sum / totalQuantity;
}
static void display() { // 【修复】拼写错误 diaplay -> display
cout << fixed << setprecision(3) << sum << endl;
cout << fixed << setprecision(5) << average() << endl;
}
};
// 【修复】静态数据成员必须在类外进行初始化!
double Product::discount = 0.9;
double Product::sum = 0.0;
int Product::totalQuantity = 0;
int main() {
int m;
cin >> m;
if (m == 0) {
cout << "you can go home" << endl;
return 0; // m为0直接结束程序
}
for (int i = 0; i < m; ++i) {
int n;
double price;
cin >> n >> price; // 【修复】必须先读入用户的输入!
Product p(n, price);
} // 对象 p 在这里发挥完累加作用后,安静地销毁
// 【修复】所有账单算完之后,在循环外面统一打印一次
Product::display();
return 0;
}
浙公网安备 33010602011771号