#include
#include
using namespace std;
//用來待處理書本銷售情況的類
class Sales_data
{
friend istream &read(istream&,Sales_data&);
friend ostream &print(ostream&,Sales_data&);
public:
//非委托的構造函數使用對應的實參初始化成員
Sales_data(string s,unsigned cnt,double rev):
bookNo(s),units_sold(cnt),revenue(rev*cnt){}
//其余構造函數全都委托給另一個構造函數
Sales_data():Sales_data(" ",0,0){}
Sales_data(string s):Sales_data(s,0,0){}
Sales_data (istream &is):sale_data(){ read(is,*this);}
string isbn() const{ return bookNo;}//用來返回書本的書名號
Sales_data& combine(const Sales_data&);//如果輸入的兩個書名號相同,這將這兩個書名號
//相同的類的銷售數據相加
private:
double average() const
{ return units_sold ? revenue/units_sold:0;}//用來求一本書的平均價格
//因為在不同書店相同書名號的書定價也會不同
string bookNo;//書名號
unsigned units_sold;//銷售數量
double revenue;//書本銷售的總價
};
//類接口
istream &read(istream&,Sales_data&);//用於從用戶讀取數據
ostream &print(ostream&,Sales_data&);//用於打印數據
istream &read(istream& is,Sales_data& item)
{
double price=0;
is>>item.bookNo>>item.units_sold>>price;
item.revenue=price*item.units_sold;
return is;
}
ostream &print(ostream& os,Sales_data& item)
{
os<<item.isbn()<<" "<<item.units_sold<<" "
<<item.revenue<<" "<<item.average();
return os;
}
Sales_data& Sales_data::combine(const Sales_data &rhs)
{
units_sold+=rhs.units_sold;//把rhs的成員加到this對象的成員上
revenue+=rhs.revenue;
return *this;//返回調用該函數的對象
}
問題就是出在那三個委托構造函數上,在它們參數列表:後面的被委托的函數名下面編譯器老給我畫波浪線,說Sales_data不是“Sales_data"類的非靜態數據成員
或基類,不過這本書還沒講到基類...............,我照著書本打的 不知道出了什麼問題,之前也問過,不過代碼沒給齊,我自己往後看書以為搞懂了,結果還是不知道問題出在哪
委托構造函數是c++11引入的,你需要你的編譯器支持c++11,比如VS2013等。
C++11 FAQ中文版:委托構造函數(Delegating constructors)