C++实验一、、

#include <iostream>
using namespace std;
#include <stdlib.h>					//使用srand()函数引入类库 
#include <time.h>	

class Bakery
{
	public:
		const double fixedCost;		//注意常量的初始化 
		Bakery();
		Bakery(double breadPrice, int breadCount=100);	//默认参数放在最后面 
		Bakery(const Bakery& b);	//注意拷贝构造函数的形式 
		~Bakery();
				
		int GetID(){		//写在类的声明中,隐藏内联函数 
			return bakeryID;
		}
		int GetSellBreadCount(){
			return sellBreadCount;
		}
		inline double GetAllProfit(); 	//显示内联函数 	
		int MakingBread(int n);
		double SellBread(int n);
	protected:
		static int bakeryCount;		//注意静态成员变量的初始化   
									//静态成员必须初始化才可以调用。因为不占用类对象空间,如果不初始化,不会给静态成员分配内存空间,调用时会 
		int breadCount;
		double breadPrice; 
		int  bakeryID;
		int sellBreadCount;	
		double allProfit;	 
};

// 内联函数只能在头文件中定义,因为编译时需要把内联函数嵌入到程序中。不是调用,所以不能放到.cpp文件中 
inline double Bakery::GetAllProfit()
{
	return allProfit;
}
int Bakery::bakeryCount = 0;	//静态变量初始化最好放在.cpp文件中。放到.h文件中多次引用头文件会冲突 

Bakery::Bakery():fixedCost(1.5)	//注意常量的初始化 
{
	//构造函数初始化 
	breadCount =100;
	breadPrice =5;
	bakeryID = ++bakeryCount;
	sellBreadCount =0;
	allProfit =0;
}

Bakery::Bakery(double breadPrice,  int breadCount):fixedCost(1.5)	//1.默认参数在函数定义中不重复赋值。 
{
	//注意使用this和没有使用this的区别 
	this->breadCount =breadCount;
	this->breadPrice =breadPrice;
	if(  this->breadPrice <2 ){	//面包价格不能少于2元 
		this->breadPrice =2;
	}
	this->bakeryID = ++bakeryCount;
	this->sellBreadCount =0;
	this->allProfit =0;
}

Bakery::Bakery(const Bakery& b ):fixedCost(1.5)	//常量在每一个构造函数中都要初始化 
{
	breadCount = b.breadCount;
	breadPrice = b.breadPrice;
	bakeryID = ++bakeryCount;
	sellBreadCount =0;
	allProfit =0;
}

Bakery::~Bakery()
{
	cout<<"面包店"<<bakeryID<<"关闭!"<<endl;
}

int Bakery::MakingBread(int n)
{
	breadCount +=n;
	return breadCount;
}
double Bakery::SellBread(int n)
{		
	if(  breadCount<n ){
		n =  breadCount;
	}
	double	profit = (breadPrice - fixedCost)*n; 
	allProfit = allProfit + profit;
	breadCount =breadCount - n;
	sellBreadCount = sellBreadCount + n;
	return profit;
}
int main(int argc, char** argv) {
	Bakery a;
	Bakery b(4,120);
	Bakery c(b);
	
	srand(time(NULL)); // time(NULL) 获取当前时间。  以当前时间为随机生成器的种子

	for(int i=-0; i<10; i++)
	{	
		a.SellBread(  10 +  rand() % 21  );	//随机生成一个10-30的数 
		a.MakingBread(  10 +  rand() % 21  );
		
		b.SellBread(  10 +  rand() % 21  );
		b.MakingBread(  10 +  rand() % 21  );
		
		c.SellBread(  10 +  rand() % 21  );
		c.MakingBread(  10 +  rand() % 21  );
	} 


	cout<<"面包店"<<a.GetID()<<"卖出"<<a.GetSellBreadCount()<<"个面包,获利"<<a.GetAllProfit() <<"元!"<<endl;
	cout<<"面包店"<<b.GetID()<<"卖出"<<b.GetSellBreadCount()<<"个面包,获利"<<b.GetAllProfit() <<"元!"<<endl;
	cout<<"面包店"<<c.GetID()<<"卖出"<<c.GetSellBreadCount()<<"个面包,获利"<<c.GetAllProfit() <<"元!"<<endl;

	//注意 析构函数调用顺序 
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值