首页 > 其他分享 >访问限制

访问限制

时间:2023-11-08 13:47:24浏览次数:29  
标签:友元 限制 函数 void 访问 类内 struct

  • 在前面说到面向对象原理的时候提到访问限制,即外部操作不可以访问类内的成员而只能访问类给外部的接口(或者说“服务”)。
  • 这主要通过三种不同的访问属性实现,下面将再详细的介绍一下访问属性相关的细节。

Setting limits

  • 保证使用类的程序员不能随便修改类内部的数据。
  • 保证维护类的程序员可以修改类内的代码而不导致影响到使用类的代码。

C++ 提供了三种类型的访问属性

  • public
    public 是公开的,任何人都可以访问。
  • private
    private 是私有的,只有这个类内的成员函数可以访问。
  • protected
    protected 是受保护的,只有这个类内的成员函数和这个类的子类可以访问。

特别的,同一个类内的对象可以互相访问私有的成员变量。

Friends

  • 类可以声明别的类、别的类内的函数、别的函数是一个友元类/友元函数。
  • 友元对象可以访问类内私有成员。

如下定义:

//声明 X
struct X;

struct Y
{
  void f(X*);
};

struct X//定义 X
{
  private:
    int i;
  public:
    void initialize();
    friend void g(X*, int);//g是一个友元函数
    friend void Y::f(X*);//Y类内的f函数是一个友元函数
    friend struct Z;//Z是友元类
};

//所有友元类和友元函数虽然不属于 X 类,但是他们是 X 的友元,所以他们都可以访问 X 的私有成员 i

void g(X* x, int val)
{
  x -> i = val;
}

void Y::f(X* x)
{
  x -> i = 666;
}


int main()
{
  X a;
  Y b;
  g(&a, 233);
  b.f(&a);
  //以上两句如果去掉友元声明,则是不合法的

  return 0;
}

Struct 与 Class

  • Struct 默认为 public,Class 默认为 private,除此之外没有区别。

我们不建议在 C++ 中使用 struct,除非我们只需要几个简单的数字集合。

标签:友元,限制,函数,void,访问,类内,struct
From: https://www.cnblogs.com/zaza-zt/p/17817190.html

相关文章

  • 依赖注入与API接口访问速度
    手上有个项目,客户反馈说一个接口访问慢。查了接口调用的sql,发现并不是sql影响接口。本地调试发现,从网页点击开始访问到实际进入接口函数花费了很多时间,通过与其他接口对比。发现该控制器通过Ioc注入了较多的服务接口。于是删减不必要接口及通过其他方式调用接口,使改接口访问时......
  • Acl 访问控制列表
    作用:1.抓取信息源,匹配路由,路由策略2.抓取数据流,数据过滤→默认允许所有-黑名单,数据选路,策略路由分类:1.基本acl:2000-2999   只能匹配源,适合抓取路由2.高级acl:3000-3999   可以匹配五元组,更适合抓数据流3.基于接口:1000-19994.基于二层mac地址:4000-49995.自定义:acl m......
  • 208-iframe访问其他网站,报错:because it set 'X-Frame-Options' to 'sameorigin'
    iframe代码如下:<iframeid="mainFrame"name="mainFrame"src="https://etax.fujian.chinatax.gov.cn/xxmh/html/index.html"border="0"></iframe>会报错:Refusedtodisplay'https://etax.fujian.chinatax.gov.......
  • 在线直播系统源码,输入框限制字节数 区分中英文
    在线直播系统源码,输入框限制字节数区分中英文   // 规则名称验证规则  不包含特殊字符   letcheckGroupName=(rule,value,callback)=>{    letreg=/^[0-9A-Za-z\u4e00-\u9fa5\(\)\(\)]+$/;     if(value!==''&&!reg.test(value)){......
  • Oracle中B-tree索引的访问方法(十一)-- 索引的分裂行为
    索引的分裂行为当某个索引块中要插入新的索引条目,但其中又没有可用空间时,就会发生索引的分裂。根据分裂发生所在的索引块类型的不同,可以分为在根块上发生的分裂,在分支块上发生的分裂和在叶子块上发生的分裂。下面,就这三种情况做分别介绍。从前面的实验中,我们已经看到,大约每个索引块......
  • C#开发的软件在Windows7中出现对路径的访问被拒绝异常
    C#开发的软件在Windows7中出现对路径的访问被拒绝异常在VS2008/VS2010下,右键项目=>属性=>安全性=>直接勾选“启用ClickOnce安全设置”即可解决问题。 创建文件夹和文件时,选择其他盘,比如:D,E,F.不要选择创建到C盘。......
  • java访问数据库的步骤,把每一步骤都讲解出来
    Java访问数据库通常是通过JDBC(JavaDatabaseConnectivity)API实现的。JDBC是一个JavaAPI,可以统一地访问各种关系型数据库。使用JDBC访问数据库的步骤如下:1.加载数据库驱动首先,需要加载你要连接的数据库对应的JDBC驱动。这一步通常通过调用Class.forName()方法实现。Class.for......
  • 如何通过java程序访问数据库,举个简单的例子,提供执行过程
    要通过Java程序访问数据库,你需要使用JDBC(JavaDatabaseConnectivity)API,它是一个用于执行SQL语句的JavaAPI。以下是使用JDBC访问数据库的基本步骤,以及一个简单的示例,该示例连接到数据库并执行一个查询。步骤:加载数据库驱动:这是告诉JVM使用哪个数据库驱动。建立连接:使用数据库......
  • Thinkphp5判断是否使用手机访问,TP5如何区分PC端还是手机端访问?
    判断用户是否使用手机端访问,这个是我们做web研发时经常遇到的一个功能点。一个很简单的功能点,解决方案也有很多种,比如使用原生PHP通过分析UA来判断。但如果你的后端用的是ThinkPHP5框架的话,解决这个功能点就更简单了,因为TP5的源码中已经封装好了,我们可以直接使用。 12......
  • 配置使用百度地图时出现:APP Referer校验失败。请检查该ak设置的白名单与访问所有的域
    如果是个人内部测试使用,直接将IP白名单设置为*  ......