首页 > 代码库 > 【c++ primer, 5e】访问控制与封装

【c++ primer, 5e】访问控制与封装

练习

7.16

无,类的接口定义在public说明符之后,类的实现细节定义在private说明符之后。

 

7.17

有。类成员的默认访问权限不同。class的类成员默认为private,struct的则默认为public。

通常来说,当我们希望定义的类的所有成员是public的时候就用struct。

 

7.18

p242

 

7.19

 

【友元】

练习

7.20

声明的类外函数需要直接引用类内的私有成员的时候要用到友元函数。

设计原因:并非所有的、与某个类相关的函数都适合声明成那个类的成员函数,例如书上的add(obj, obj);

利弊:不详。。。

 

7.21

 

7.22

#include <iostream>
#include <string>
using namespace std;

// Person.h
class Person {
friend istream &read(istream &is, Person &p);
public:
    Person() = default;
    Person(const string &name): name(name) {}
    Person(const string &name, const string &address): name(name), address(address) {}
    Person(istream&);
    string getName() const { return name; }
    string getAddress() const  { return address; }
private:
    string name;
    string address;
};
istream &read(istream&, Person&);
ostream &print(ostream&, const Person&);

// Person.cpp
istream &read(istream &is, Person &p)
{
    is >> p.name >> p.address;
    return is;
}
ostream &print(ostream &os, const Person &p)
{
    os << p.getName() << " " << p.getAddress();
    return os;
}
Person::Person(istream &is)
{
    read(is, *this);
}

// main.cpp
int main()
{
    Person p1;
    Person p2("xklf");
    Person p3("llyy", "china");
    Person p4(cin);
    print(cout, p1) << endl;
    print(cout, p2) << endl;
    print(cout, p3) << endl;
    print(cout, p4) << endl;
    return 0;
}

 

【c++ primer, 5e】访问控制与封装