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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值