c++:访问权限

什么是访问权限问题

public访问权限是全局的
(1)public的成员变量,在类的成员方法中可以直接访问

name
this->name

(2)public的成员变量,在任何外部代码中可以通过类的对象来直接访问

xiaohong.age = 99;

(3)public的成员方法,在类内其他成员方法中可以直接调用

  work();
  this->work();

(4)public的成员方法,在任何外部代码中可以通过类的对象来直接访问

xiaohong.work();

(5)public就是完全不设防

private访问权限

 private:
  int height;

(1)private的成员变量,在类的成员方法中可以直接访问

  cout << "printfmy height:" << this->height << endl;//OK

(2)private的成员变量,在任何外部代码中不可以通过对象来直接访问

    // xiaohong.height = 190; //不行

(3)private的成员方法,在类内其他成员方法中可以直接调用

void testperson::eat(void) {
  setheight(190);//OK
  // work();
  // this->work();
  cout << this->name << "-eat" << endl;
}

(4)private的成员方法,在任何外部代码中不可以通过对象来直接访问

 // xiaohong.setheight(789);//不行

(5)private就是对内不设防,对外完全设防的

  • private:
    • 私有成员对同一类的其他成员函数以及派生类都是不可见的。
    • 只有该类的成员函数(包括友元函数)可以直接访问私有成员。
    • 私有成员在派生类中通常不会被继承,除非显式地使用 public 关键字声明为公有继承。
  • protected:
    • 保护成员对于派生类是可见的,但对同一类的其他成员函数仍然保持私有。
      – 派生类可以直接访问其基类的 protected 成员。
    • 如果派生类的成员函数不需要直接访问基类的私有数据,保护成员提供了一种更安全的访问方式。
  • 更多关于访问权限问题的问题
    (1)protected是第三种访问权限修饰符,如果有必要还可以有第4种甚至更多
    (2)访问权限叠加类的继承、static、friend等特性后才更加显出复杂性和威力
    (3)暂时只先引入这个概念,掌握基本用法和规则即可,后面逐步去深入

C++为什么要设计访问权限

  • 访问权限作用1:保护内部资源
    (1)private的成员是class内部使用,外部没必要直接访问(读取或赋值),所以干脆在语法上让你看不见
    (2)访问权限的保护是一种语法层面的保护,而非硬件上限制访问,硬件做不了这么细致
    (3)最终目的也是为了整个程序更安全

  • 访问权限作用2:隐藏外部无需关心的细节
    (1)将class内部使用而外部绝不会用到的成员变量隐藏起来,以免干扰外部或者不小心被外部修改了
    (2)隐藏细节可以降低使用类库的人的难度,调用时只看到对我有用的东西
    (3)这个隐藏其实是把class的作者和使用者专业分工,是很有必要的

  • 这就是面向对象的封装特性
    (1)封装特性的体现之一就是抽象,抽象的一层意思就是隐藏掉不必要的细节
    (2)封装特性的体现之一就是组织和保护,便于整个整体和外部更合理的交流

访问权限带来的一些新编程理念

藏其实是把class的作者和使用者专业分工,是很有必要的

这就是面向对象的封装特性
(1)封装特性的体现之一就是抽象,抽象的一层意思就是隐藏掉不必要的细节
(2)封装特性的体现之一就是组织和保护,便于整个整体和外部更合理的交流

访问权限带来的一些新编程理念

  • 只读或只写变量
    (1)问题:你的class中需要一个变量,但是希望外部只能读不能写,怎么实现?
    (2)分析:硬件、OS、编程语言都未提供这样的RO或WO的机制,只能间接实现了
    (3)解决方案:利用访问权限,将成员变量设计为private,然后再通过封装成员方法来实现
    (4)如果只提供read方法那就是只读成员,如果只提供write方法那就是只写成员
    (5)这样的成员经常被称为属性(property),C#等高级编程语言中就源生支撑这种新编程思想

  • 复杂程序架构化
    (1)简单程序规模小,参与人少,靠人本身的逻辑能力就能保证实现和质量
    (2)复杂程序规模大参与人多,协作成本高,水平良莠不齐,必须靠架构式设计才能保证实现和质量
    (3)架构化设计中权限管控的思想很重要,每一层的访问权限和主要关注点都不同

  • 为什么C语言不需要这些
    (1)C主要做裸机开发和OS内核开发,都是独立一体化程序,不隔离,所以不需要也没法管控权限
    (2)C程序一般规模小,不需要管控权限
    (3)C程序强调性能,而权限管控一定程度会牺牲性能。凡事都有两面性。
    (4)越是高级语言,编程越偏业务逻辑,就越需要权限管控和架构思想这些。

总结

理解不同关键词对应不同的权限
理解访问权限的作用

学习记录,侵权联系删除。
来源:朱老师物联网大课堂

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

li星野

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值