65,189
社区成员




class CheckoutRecord{
friend ostream& operator<<(ostream&, const CheckoutRecord&);
friend istream& operator>>(istream&, CheckoutRecord&);
public:
typedef vector<pair<string, string>*>::size_type size_type;
CheckoutRecord(double d = 0,
string t = "NULL",
Date d1 = Date(),
Date d2 = Date()):
book_id(d), title(t), date_borrowed(d1), date_due(d2){}
pair<string, string>& operator[](size_type i);
const pair<string, string>& operator[](const size_t i) const;
private:
double book_id;
string title;
Date date_borrowed;
Date date_due;
pair<string, string> borrower;
vector<pair<string, string>*> wait_list;
};
const pair<string, string>&
CheckoutRecord::operator[](const size_t i) const{
cout << "const pair<string, string>& CheckoutRecord::operator[](size_t i)" << endl;
return *wait_list[i];
}
pair<string, string>&
CheckoutRecord::operator[](size_t i){
cout << "pair<string, string>& CheckoutRecord::operator[](size_t i)" << endl;
return *wait_list[i];
}
CheckoutRecord obj1;
readFile(obj1);
cout << obj1;
cout << obj1[2].first << "," << obj1[2].second << endl;
pair<string, string>* val = &obj1[1];
val->first = "hu";
cout << obj1 << endl;
book_id:787001 title:cprimer, 2016-1-1, 2016-4-1, wang xin
li, shumeng
li, bo
pan, ji
zhu, xiantan
pair<string, string>& CheckoutRecord::operator[](size_t i)
pan,pair<string, string>& CheckoutRecord::operator[](size_t i)
ji
pair<string, string>& CheckoutRecord::operator[](size_t i)
book_id:787001 title:cprimer, 2016-1-1, 2016-4-1, wang xin
li, shumeng
hu, bo
pan, ji
zhu, xiantan
Program ended with exit code: 0
const pair<string, string>& operator[](const size_t i) const;
时是看类实例化后的对象是否是const的,与例子中的obj1是否是const有关,而与val无关,也与是否是在等号左右无关。这样理解对吗?
2.对于const pair<string, string>& operator[](const size_t i) const;
第一个const指明返回const引用,第三个const指明函数签名,使其能够重载返回非const引用版本[]运算符,那么第二个,也就是const size_t i的const在这有什么含义呢?
3. 何时调用const pair<string, string>& operator[](const size_t i) const;
版本呢?