【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;
}
时间: 2024-10-14 10:51:48

【c++ primer, 5e】访问控制与封装的相关文章

0715-----C++Primer听课笔记----------疯狂封装之生产者与消费者

1.程序框架分析: a)首先将mutex, condition, queue 封装成各自的类,方便对外提供接口函数,这里要注意 condition的封装,一个条件变量和一把锁是一起用的,因此在初始化 condition 对象的时候要用一个 mutex 对象去初始化,在pthread_cond_wait函数中还要用到互斥锁中的指针,因此在mutex 类中要封装一个返回相应类型的函数.此外多个条件变量一般是和同一互斥锁进行交互,因此要在condition 中的  mutex对象设为引用,这里可以这样

C++之类之访问控制与封装

先看下封装有什么好处: 1.一旦数据成员被定义成private,类的作者就可以自由修改数据,只要类的接口不变(public),用户代码就无需改变. 2.防止由于用户的原因造成数据被破坏,因为用户无法直接访问到private成员,所以当对象状态被破坏时,只有实现部分的代码采可能产生这样的错误,找bug会大大节省时间. 一.使用public和private封装: 在使用访问说明符之前,user可以直接到达类对象的内部并且控制它的具体实现细节:我们需要使用访问说明符(access specifiers

PHP 类的访问控制与封装private修饰符

<?php /* 封装就是把对象中的成员属性和成员方法加上访问修饰符,使其尽可能隐藏对象的                 内部细节,以达到对成员的访问控制--切记不是拒绝访问 private (私有的):被定义为 private 的成员,允许同一个类里的所有成员访问(调用方法是用:$this->方法名), 但对于在该类外调用有private修饰的成员方法和在子类中调用都不允许的. */ header("Content-type: text/html; charset=utf-8&q

访问控制与封装

在C++语言中,我们使用访问说明符加强类的封装性: ·定义在public说明符之后的成员在整个程序内可被访问,public成员定义类的接口. ·定义在private说明符之后的成员可以被类的成员函数访问,但是不能被使用该类的代码访问,private部分封装(即隐藏了)类的实现细节. 作为接口的一部分,构造函数和部分成员函数紧跟在public说明符之后:而数据成员和作为实现部分的函数则跟在private说明符后面. 一个类可以包含0个或多个访问说明符,而且对于某个访问说明符能出现多少次也没有严格限

【c++ primer, 5e】函数指针

简单的示例: #include <iostream> using namespace std; int sum(int x, int y) { return x + y; } int main() { cout << sum(1, 2) << endl; int (*pf)(int, int); // 未初始化 pf = sum; cout << pf(3, 4) << endl; /* output: 3 7 */ return 0; } 遇到

【c++ primer, 5e】类的其他特性

类成员再探 定义一个类型成员: #include <iostream> #include <string> using namespace std; class Screen { public: using pos = string::size_type; /* 这就是"类型成员",必须先定义后使用(p232) 等价声明: typedef string::size_type pos; string::size_type 一般是 unsigned int */ p

【c++ primer, 5e】构造函数 &amp; 拷贝、赋值和析构

[构造函数] 1.构造器就是创建对象时被调用的代码. 2.如果没有自定义构造器,那么编译器将自动合成一个默认的无参构造器. 3.自定义的构造器不允许加const,所创建const的对象只有在构造器代码执行完后,才被赋予const性质. 4.如果自定义了构造器,那么默认的构造器将无效化,可以理解为自定义内容覆盖了默认的内容. 5.构造函数使用类内初始值并不是一个坏选择. 6.default. 7.构造函数初始值列表. [拷贝.赋值和析构] 如果我们不主动定义这些操作,那么编译器将会替我们合成它们.

【c++ primer, 5e】

练习 7.6 & 7.7 #include <iostream> #include <string> using namespace std; // Sales_data.h struct Sales_data { // public部分,对象看起来是怎么样的. std::string isbn() const { return bookNo; } // inline function Sales_data& combine(const Sales_data&

重读C++ Primer笔记

C++ Primer 5E 有符号和无符号 无符号类型和有符号类型混合运算时,有符号数会被提升至无符号类型,如果其值为负责会产生错误. int main() { unsigned int u = 10; int i = -42; std::cout<<u+i<< std::endl; // 4294967264 if sizeof(int)==4 return 0; } 列表初始化 列表初始化过程不允许损失数据类型精度,所以下面代码中的两行无法通过编译 int main() { d