ITPub博客

首页 > 应用开发 > IT综合 > 【C++】类初探常量成员函数与构造函数初始值列表

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

原创 IT综合 作者:风尘_NULL 时间:2017-08-01 16:27:18 0 删除 编辑
头文件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博客 ” ,链接:https://blog.itpub.net/30221425/viewspace-2142919/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
腾讯科技(深圳)有限公司 DBA

注册时间:2015-04-24

  • 博文量
    76
  • 访问量
    238216