#include
class Sales_data{
//友元函数范围申明
friend std::istream &read(std::istream &is,Sales_data &item);
friend std::ostream &print(std::ostream &os,Sales_data &item);
public:
//构造函数会覆盖内置初始化的值,:到{表示一个列表,用于初始化成员变量,叫做构造函数初始值列表
Sales_data(const std::string &s="",const unsigned n=0,
const double p=0.0):bookNo(s),units_sold(n),revenue(p*n){};
//对象是一个常量,返回时必须是个const,例如:实例化一个常量对象const Sales_data const_item;
std::string isbn() const;
//将一个Sales_data对象加到另一个Sales_data对象上面
Sales_data &combine(const Sales_data &);
//求本书的销量内的平均价
double avg_price() const;
private:
//内置初始化则为空字符串,因为不是基本类型,指针和引用等复合类型
std::string bookNo;
//基本类型,内置初始化未定义
unsigned int units_sold;
double revenue;
};
//友元函数的声明;注意在内中的声明只是表示一个范围,表示该友元函数可以访问该类的对象
std::istream &read(std::istream &is,Sales_data &item);
std::ostream &print(std::ostream &os,Sales_data &item); 源文件mycpp.cpp #include #include "mycpp.h"std::string Sales_data::isbn() const{return this->bookNo;}double Sales_data::avg_price() const{if(units_sold){return revenue/units_sold;}else{return 0;}}Sales_data & Sales_data::combine(const Sales_data &rha){units_sold+=rha.units_sold;revenue+=rha.revenue;//解引用得到该对象return *this;}//读入一个对象std::istream & read(std::istream &is,Sales_data &item){double price=0;is>>item.bookNo>>item.units_sold>>price;return is;}//输出一个对象std::ostream & print(std::ostream &os,Sales_data &item){os<" "< units_sold<<" " <revenue<<" "< return os;}主函数
int main(){Sales_data totals("xangxing_2",3,12);//实例化一个常量对象const Sales_data total;read(std::cin,totals);//错误,常量对象初始化后不能修改//read(std::cin,total);print(std::cout,totals)<<std::endl;}