《面向对象程序设计》第八次作业

设计一个表示圆柱的类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;
}

posted @ 2026-06-03 12:09  叶臧  阅读(16)  评论(0)    收藏  举报