【C++】類初探常量成員函式與建構函式初始值列表

風塵_NULL發表於2017-08-01
標頭檔案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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章