【C++】类初探常量成员函数与构造函数初始值列表

头文件mycpp.h
#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;

}



请使用浏览器的分享功能分享到微信等