C C++最全C++Primer 学习(类 二)访问控制与封装_c++ primer 封装性,2024年最新C C++程序员进大厂面试必备基础技能

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取


作为接口的一部分,构造函数和部分成员函数(即isbn和combine)紧跟在public说明符之后;而数据成员和作为实现部分的函数则跟在private说明符后面。


**一个类可以包含0个或多个访问说明符**,\*\*而且对于某个访问说明符能出现多少次也没有严格限定。\*\*每个访问说明符指定了接下来的成员的访问级别,其有效范围直到出现下一个访问说明符或者到达类的结尾处为止。


* 如果我们使用struct关键字,则定义在第一个访问说明符之前的成员是public的;
* 如果我们使用class关键字,则这些成员是private的。


**使用class和struct定义类唯一的区别就是默认的访问权限。**


**友元**


既然Sales data的数据成员是private的,我们的read、print和add函数也就无法正常编译了,这是因为尽管这几个函数是类的接口的一部分,但它们不是类的成员。


类可以允许其他类或者函数访问它的非公有成员,**方法是令其他类或者函数成为它的友元(friend)**。如果类想把一个函数作为它的友元,只需要增加一条以friend关键字开始的函数声明语句即可:



class Sales_data{
//为Sales_data的非成员函数所做的友元声明
friend Sales_data add (const Sales_data&, const Sales_data&);
friend std::istream &read (std::istream&, Sales_data&);
friend std: :ostream &print (std: :ostream&, const Sales_data&);
//其他成员及访问说明符与之前一致
public:
Sales_data () = default;
Sales_data (const std: :string &s, unsigned n, double p)
:bookNo (s), units_sold (n), revenue (p*n) {}
Sales_data (const std: :string &s) : bookNo (s) {}
Sales_data (std::istream&);std::string isbn () const{ return bookNo;}
Sales_data &combine (const Sales_data&);
private:
std::string bookNo;
unsigned units_sold = 0;
double revenue = 0.0;
};
// Sales_data接口的非成员组成部分的声明
Sales_data add (const Sales_data&, const Sales_data&);
std::istream &read (std::istream&, Sales data&);
std::ostream &print (std::ostream&, const Sales _data&);


**友元声明只能出现在类定义的内部,但是在类内出现的具体位置不限**。友元不是类的成员也不受它所在区域访问控制级别的约束。


一般来说,最好在类定义开始或结束前的位置集中声明友元。


封装有两个重要的优点:


* 确保用户代码不会无意间破坏封装对象的状态。
* 被封装的类的具体实现细节可以随时改变,而无须调整用户级别的代码。


**友元的声明**


友元的声明仅仅指定了访问的权限,而非一个通常意义上的函数声明。如果我们希望类的用户能够调用某个友元函数,那么我们就必须在友元声明之外再专门对函数进行一次声明。


为了使友元对类的用户可见,我们通常把友元的声明与类本身放置在同一个头文件中(类的外部)。因此,我们的Sales data头文件应该为read、print和add提供独立的声明(除了类内部的友元声明之外)。


**注意:**


![img](https://img-blog.csdnimg.cn/img_convert/1439e24b2d506f695d338e7b1f923161.png)
![img](https://img-blog.csdnimg.cn/img_convert/498a60c246dd9bfa6a20066641109fee.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值