码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-04-10 09:32:12      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:his   main   ref   using   lin   原因   log   cout   print   

练习

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】访问控制与封装

标签:his   main   ref   using   lin   原因   log   cout   print   

原文地址:http://www.cnblogs.com/xkxf/p/6687421.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!