头文件mycpp.h
#include <iostream>
int main()
#include <iostream>
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 <iostream>
#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<<item.isbn()<<" "<<item.units_sold<<" "
<<item.revenue<<" "<<item.avg_price();
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;
}
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30221425/viewspace-2142919/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30221425/viewspace-2142919/