c++primer 7,1,7,2笔记

#include<iostream>

//
//#ifndef Cccc//第一次包含本头文件时,#ifndef判断为真,预处理器将处理后面的内容直到#endif,此时的预处理变量Cccc已定义
//#define Cccc//第二次包含本头文件时,#ifndef判断为假,预处理器将忽略后面的内容,预处理变量一般定义为本头文件的大写形式
/*
....
*/
//#endif//只要简单的加上就好了,无视C++中的作用域规则

using namespace std;
class sales_data//the difference between class and struct is only class里面默认是private struct默认是 public
{
	// friend 是非成员函数但可以调用类中的非公有成员

	string bookno;
	double units_sold;
	double revenue;
public:
sales_data()=default;  //默认构造函数
	~sales_data();
	string isbn(/*const sales_data*const this*/) const//这里const的作用:没有const的时候,this是一个sales_data*const ptr,
	{                   //	but now it's a const sales_data*const,不能改变所指向地常量。
		return bookno;//ISBN用bookno时相当于隐式地使用了this指向的成员 相当于 return this-> bookno

	}
	sales_data& combine(const sales_data rhs)//为了与内置地运算符保持一致,combine必须返回引用类型,因为左侧地运算对象为sales_data
	{                                        //所以就返回sales_data的引用。 返回类型是sales_data &
		this->units_sold += rhs.units_sold;
		revenue += rhs.revenue;
		return *this;
	}
	double avg_price() const
	{
		if (units_sold)
			return revenue / units_sold;
		else
			return 0;
	}
	istream& read(istream& is, sales_data& item)
	{
		double price = 0;
		is >> item.bookno >> item.units_sold >> price;
		item.revenue = price * item.units_sold;
		return is;
	}
	ostream& print(ostream& os, const sales_data& item)//决定普通引用和常量引用的是是否想改变它
	{
		os << item.isbn() << " " << item.units_sold << " " << item.revenue << " " << item.avg_price();
		return os;
	}
	sales_data add(const sales_data& lhs, const sales_data& rhs)
	{
		sales_data sum = lhs;
		sum.combine(rhs);
		return sum;
	}


};
int main()
{
	sales_data total;
	if (total.read(cin, total))
	{
		sales_data trans;
		while (trans.read(cin, trans))
		{
			if (total.isbn() == trans.isbn())
				total.combine(trans);
			else {
				total.print(cout, total) << endl;
				total = trans;
			}
		}
		total.print(cout, total) << endl;
	}
	else
	{
		cerr << "NO, data?!" << endl;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值