练习7.20:
当非成员函数确实需要访问类的私有成员时,我们可以把它声明成该类的友元。此时,友元可以“工作在类的内部”,像类的成员一样访问类的所有数据和函数。但是一旦使用不慎(比如随意设定友元),就有可能破坏类的封装性。
练习7.21:
class Sales_data{friend Sales_data add(const Sales_data &lhs,const Sales_data &rhs);friend std::istream&read(std::istream &is,Sales_data &item);friend std::ostream &print(std::ostream &os,const Sales_data &item);private:std::string bookNo;unsigned units_sold = 0;double sellingprice = 0.0;double saleprice = 0.0;double discount = 0.0;
};
练习7.22:
#include <iostream>
#include <string>
using namespace std;
class Person {private:string strName;string strAddress;public:Person() = default;Person(const string &name,const string &add){strName = name;strAddress = add;}Person(std::istream &is){is>>*this;} //这里的<<需要重载public:string getName()const{return strName;}string getAddress() const{return strAddress;}
};