友元类

不仅可以将一个函数声明为一个类的“朋友”,还可以将整个类声明为另一个类的“朋友”,这就是友元类。友元类中的所有成员函数都是另外一个类的友元函数。

例如将类 B 声明为类 A 的友元类,那么类 B 中的所有成员函数都是类 A 的友元函数,可以访问类 A 的所有成员,包括 public、protected、private 属性的。

#include <iostream>
using namespace std;
class Address;  //提前声明Address类
//声明Student类
class Student{public:Student(char *name, int age, float score);
public:void show(Address *addr);
private:char *m_name;int m_age;float m_score;
};
//声明Address类
class Address{public:Address(char *province, char *city, char *district);
public://将Student类声明为Address类的友元类friend class Student;
private:char *m_province;  //省份char *m_city;  //城市char *m_district;  //区(市区)
};
//实现Student类
Student::Student(char *name, int age, float score): m_name(name), m_age(age), m_score(score){ }
void Student::show(Address *addr){cout<<m_name<<"的年龄是 "<<m_age<<",成绩是 "<<m_score<<endl;cout<<"家庭住址:"<<addr->m_province<<"省"<<addr->m_city<<"市"<<addr->m_district<<"区"<<endl;
}
//实现Address类
Address::Address(char *province, char *city, char *district){m_province = province;m_city = city;m_district = district;
}
int main(){Student stu("小明", 16, 95.5f);Address addr("陕西", "西安", "雁塔");stu.show(&addr);Student *pstu = new Student("李磊", 16, 80.5);Address *paddr = new Address("河北", "衡水", "桃城");pstu -> show(paddr);return 0;
}

有的编译器也可以不写 class 关键字,不过为了增强兼容性还是建议写上。

关于友元,有两点需要说明:

  • 友元的关系是单向的而不是双向的。如果声明了类 B 是类 A 的友元类,不等于类 A 是类 B 的友元类,类 A 中的成员函数不能访问类 B 中的 private 成员。

  • 友元的关系不能传递。如果类 B 是类 A 的友元类,类 C 是类 B 的友元类,不等于类 C 是类 A 的友元类。

  • 除非有必要,一般不建议把整个类声明为友元类,而只将某些成员函数声明为友元函数,这样更安全一些。

C++友元函数和友元类(三)相关推荐

  1. 初入c++(三)this指针,友元函数,友元类

    1.c++中的this指针 指向当前对象,通过它可以访问当前对象的所有成员.当前对象就是正在使用的对象: 在类的内部使用,可以访问所有的成员,public,private,protect this只能 ...

  2. C++友元函数和友元类(一)

    在 C++ 中,一个类中可以有 public.protected.private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员.现在,我们 ...

  3. C++语言基础(15)-友元函数和友元类

    一个类中可以有 public.protected.private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员.现在,我们来介绍一种例外情 ...

  4. c++远征之模板篇——友元函数、友元类

    以下内容源于慕课网的学习整理,如有侵权,请告知删除. 一.友元函数 1.分类 全局函数-->友元全局函数 成员函数-->友元成员函数 2.关键字friend 友元全局函数 如下,利用fri ...

  5. C++基础知识友元friend、友元函数和友元类

    为了在类之间进行数据共享时,提高效率,C++引入了友元的概念.友元主要有三个方面的应用: 将普通函数声明为类的友元函数: 将一个类声明为其他类的友元类: 将一个类中的成员函数声明为其他类的友元函数. ...

  6. 友元函数可以访问私有成员吗_C++的友元函数和友元类

    C++使用类对数据进行隐藏和封装,类的数据成员一般定义为私有成员,而将提供类与外界通讯接口的成员函数定义为公有的. C++类成员的三种访问权限: public:可以被该类中的函数.子类的函数.友元函数 ...

  7. C++的友元函数,友元类及#pragma once的作用

    把代码都放最后吧 友元函数的作用: 可以访问该类的私有属性 但在类的外面定义的时候没有"类::" 所以该友元函数不属于该类 友元函数的意义: C++友元函数_Bussy的博客-CS ...

  8. 友元函数,友元类,类模板

    C++提供友元机制,允许外部类和函数访问类的私有成员和保护成员的辅助方法,即将它们声明为一个给定类的友元类(或友元函数),使其具有类成员函数的访问权限.但友元本身不是类的成员,它不属于任何类. 优点: ...

  9. 友元(友元函数、友元类、类成员函数的友元)

    友元(友元函数.友元类.类成员函数的友元) (friend)友元机制:允许一个类将对其非公有成员的访问权限授予指定的函数或者类. 我们可以将友元大致分为3类: 友元函数 友元类 类成员函数的友元 一: ...

  10. c语言friend函数,C++ friend友元函数和友元类

    友元函数和友元类在实际开发中较少使用,想快速学习C++的读者可以跳过本节. 一个类中可以有 public.protected.private 三种属性的成员,通过对象可以访问 public 成员,只有 ...

最新文章

  1. 使用 vue filters过滤器直接显示 几分钟前 几小时前 几天前
  2. 软件需求开发的18般武艺
  3. Python map, reduce, filter和sorted
  4. STM32开发 -- UCOSII移植
  5. python验证卡普耶卡(D.R.Kaprekar)6174猜想
  6. linux电视改安卓,mstar安卓智能电视方案源代码常用修改
  7. java中使用es精准查询_使用ES简单查询语句须知
  8. 在高并发情况nginx的作用
  9. String,StringBuilder, StringBuffer
  10. AssertJ断言系列一
  11. 网易云音乐api资料
  12. ASP.NET修改文件夹名称
  13. SpringMVC学习笔记(2)-参数绑定的常用方法
  14. oracle如何修改initial参数,oracle初始化参数设置
  15. paip.网站接入QQ登录总结
  16. Axure RP 9 常用快捷键
  17. Java实现仿win10计算器——微升级版
  18. 再见PDF提取收费!我用100行Python代码搞定!去你的收费!
  19. Mathematics English Vocabulary (Cited)
  20. 舒亦梵:几条投资理念,决定你是否具有富人思维

热门文章

  1. vue2.x 综合教程 一
  2. caioj 1077 动态规划入门(非常规DP1:筷子)
  3. 功能超级丰富的彩色贪吃蛇,有道具,有等级!
  4. 穷游网:这里有一个包含十二年用户体验妙计的锦囊
  5. Android Studio检测内存泄露和性能
  6. 微软 Build 2017 开发者大会:Azure 与 AI 的快速发展
  7. UI设计:掌握这6点,轻松0到1
  8. 斯坦福大学的机器学习跟深度学习。
  9. 论文笔记之:Instance-aware Semantic Segmentation via Multi-task Network Cascades
  10. Post和Get差异