10. 友元

news/2024/11/9 1:46:19/

目录

  • 1.友元
  • 2. 友元函数
  • 3. 友元类

1.友元

  1. 作用:用于访问类中的所有数据成员
  2. 缺点:破坏类的封装性,所以不到万得已,不要随便用友元

2. 友元函数

  1. 语法:
    friend 函数的返回值类型  函数名(参数列表)例子: 
    friend  void  show()  //该函数就可以访问声明他的类中的所有成员 
    {}   
    
  2. 当一个函数被声明为该类的友元函数时,该函数就不属于类中的成员函数!!
  3. 友元函数必须要在类内,声明!
  4. 友元函数可以在类中的任意地方声明, 与成员权限无关。
    在这里插入图片描述
  5. 例子:
    class  base{public: int a;protected: int b; private: int c;//声明 show 函数是该类的一个友元函数 friend void show();  //属于base 中的成员函数吗??不属于 
    };//base 类的一个友元函数
    void show(){base a; a.a = 100;  //只能访问共有成员 a.b = 200; a.c = 300;cout << a.a << endl; cout << a.b << endl; cout << a.c << endl; 
    }
    
    (结果如下)
    在这里插入图片描述
  6. 友元函数可以继承吗?
    class  base
    {private: int a;//声明一个 set 友元函数friend void set();
    };class  new_base:public base
    {private:int b;//声明一个 set 友元函数friend void set();
    };void set()
    {base a; a.a = 1000;   //可以访问私有 成员cout << a.a << endl;new_base  b;b.b = 2000;   //不可以访问 new_base 的私有成员。 编译出错
    }
    
    友元函数是不可以继承的。
    假设需要友元函数可以访问子类的私有成员,则需要在子类中再次声明该函数为友元函数。
    多个类可以对应一个友元函数吗?? 可以的!!
    一个类可以对应多个友元函数吗?? 可以的!!

3. 友元类

  1. 作用:
    当一个类为 另外一个类的友类,则该类可以访问对方的一切数据成员。
  2. 语法:
    friend class 类名
    在这里插入图片描述
  3. 例子
    class test{
    public: //单纯声明一个接口void set_base();
    private: 
    int c;
    //声明 base  是 test 的友元 
    friend  class base;
    };class  base{
    public: 
    //访问 test 中的私有成员
    void set_test(){test  a; a.c = 100;
    }
    private: 
    int c;
    //声明test 是base 的友元 
    friend class  test;
    };//重点!!重点!!在base 定义后 才实现  set_base 接口 
    void test::set_base()
    {base  a; a.c = 200;
    }
    

http://www.ppmy.cn/news/538959.html

相关文章

weka机器学习-05-聚类

Weka中使用Cluster标签页来处理聚类问题。 页面中各项的使用方法与Classify几乎一样。 不同之处&#xff1a; &#xff08;1&#xff09;Cluster标签页左侧Clusterer mode&#xff08;聚类器模式&#xff09;选项组中Classes to clusters evaluation&#xff08;类别作为簇的评…

香港科大EMBA校友黄立伟冠名两位商学院教授

香港科技大学举行第五届冠名教授席就职典礼&#xff0c;向11位杰出教授颁授冠名教授席及表扬各捐赠者对大学的热心支持。 因应2019冠状病毒的最新发展&#xff0c;使本次就职典礼移至网上举行。香港科大校董会主席廖长城先生和校长史维教授担任就职典礼的主礼嘉宾&#xff0c;各…

一场VR大赛引发的元宇宙“狂飙”

319个团队、480人参赛&#xff0c;第三届华为云VR开发应用大赛盛况空前&#xff0c;而新设立的“人气数字人形象奖”“人气虚拟偶像奖”等&#xff0c;让大赛又一次“破圈”&#xff0c;人气直升。通过大赛&#xff0c;我们看到虚拟现实、数字人、元宇宙等正“脱虚向实”&#…

线性表的详解

目录 1 线性表的定义 2 线性表的逻辑特性 3 线性表的存储结构 4 顺序表 4.1 顺序表的定义 4.2 顺序表的存储 4.3 顺序表的特点 4.4 顺序表的基本操作 &#xff08;1&#xff09;初始化顺序表 &#xff08;2&#xff09;查找操作 &#xff08;3&#xff09;插入操作 …

聚合函数04

一、聚合函数 1、conut() 计数 select cno count(sno) from sc2、sum() 求和 -- 每名学生的总成绩 select cno ,sum(grade) from sc group by cno;3、avg() 求平均值 -- 每名学生的总成绩 select cno ,sum(grade) from sc group by cno;二、分组 1、group by #求某课的选…

高内聚、低耦合

按照惯例&#xff0c;先来个图镇楼&#xff08;图片源自网络&#xff0c;侵权立删&#xff09;&#xff1a; 高内聚、低耦合是为了解决&#xff1a;接口开发规范&#xff0c;实现可插拔 起因&#xff1a;模块独立性指每个模块只完成系统要求的独立子功能&#xff0c;并且与其他…

高耦合,低内聚

对于编程的一些小伙伴在编程的时候&#xff0c;会发现许多的代码&#xff0c;代码的重复度非常的高&#xff0c;所以对于代码的精简&#xff0c;封装这词应运而生&#xff0c;对于封装&#xff0c;常常使用的就是对功能的封装&#xff0c;封装成一个函数&#xff0c;但是对于一…

聚合

聚合就是指mysql中的 Avg、Sum、Max、… 聚合函数 aggregate()是QuerySet 的一个终止子句&#xff0c;意思是说&#xff0c;它返回一个包含一些键值对的字典。 键的名称是聚合值的标识符&#xff0c;值是计算出来的聚合值。键的名称是按照字段和聚合函数的名称自动生成出来的。…