C++友元函数和友元类(三)
友元类
不仅可以将一个函数声明为一个类的“朋友”,还可以将整个类声明为另一个类的“朋友”,这就是友元类。友元类中的所有成员函数都是另外一个类的友元函数。
例如将类 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++友元函数和友元类(三)相关推荐
- 初入c++(三)this指针,友元函数,友元类
1.c++中的this指针 指向当前对象,通过它可以访问当前对象的所有成员.当前对象就是正在使用的对象: 在类的内部使用,可以访问所有的成员,public,private,protect this只能 ...
- C++友元函数和友元类(一)
在 C++ 中,一个类中可以有 public.protected.private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员.现在,我们 ...
- C++语言基础(15)-友元函数和友元类
一个类中可以有 public.protected.private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员.现在,我们来介绍一种例外情 ...
- c++远征之模板篇——友元函数、友元类
以下内容源于慕课网的学习整理,如有侵权,请告知删除. 一.友元函数 1.分类 全局函数-->友元全局函数 成员函数-->友元成员函数 2.关键字friend 友元全局函数 如下,利用fri ...
- C++基础知识友元friend、友元函数和友元类
为了在类之间进行数据共享时,提高效率,C++引入了友元的概念.友元主要有三个方面的应用: 将普通函数声明为类的友元函数: 将一个类声明为其他类的友元类: 将一个类中的成员函数声明为其他类的友元函数. ...
- 友元函数可以访问私有成员吗_C++的友元函数和友元类
C++使用类对数据进行隐藏和封装,类的数据成员一般定义为私有成员,而将提供类与外界通讯接口的成员函数定义为公有的. C++类成员的三种访问权限: public:可以被该类中的函数.子类的函数.友元函数 ...
- C++的友元函数,友元类及#pragma once的作用
把代码都放最后吧 友元函数的作用: 可以访问该类的私有属性 但在类的外面定义的时候没有"类::" 所以该友元函数不属于该类 友元函数的意义: C++友元函数_Bussy的博客-CS ...
- 友元函数,友元类,类模板
C++提供友元机制,允许外部类和函数访问类的私有成员和保护成员的辅助方法,即将它们声明为一个给定类的友元类(或友元函数),使其具有类成员函数的访问权限.但友元本身不是类的成员,它不属于任何类. 优点: ...
- 友元(友元函数、友元类、类成员函数的友元)
友元(友元函数.友元类.类成员函数的友元) (friend)友元机制:允许一个类将对其非公有成员的访问权限授予指定的函数或者类. 我们可以将友元大致分为3类: 友元函数 友元类 类成员函数的友元 一: ...
- c语言friend函数,C++ friend友元函数和友元类
友元函数和友元类在实际开发中较少使用,想快速学习C++的读者可以跳过本节. 一个类中可以有 public.protected.private 三种属性的成员,通过对象可以访问 public 成员,只有 ...
最新文章
- 使用 vue filters过滤器直接显示 几分钟前 几小时前 几天前
- 软件需求开发的18般武艺
- Python map, reduce, filter和sorted
- STM32开发 -- UCOSII移植
- python验证卡普耶卡(D.R.Kaprekar)6174猜想
- linux电视改安卓,mstar安卓智能电视方案源代码常用修改
- java中使用es精准查询_使用ES简单查询语句须知
- 在高并发情况nginx的作用
- String,StringBuilder, StringBuffer
- AssertJ断言系列一
- 网易云音乐api资料
- ASP.NET修改文件夹名称
- SpringMVC学习笔记(2)-参数绑定的常用方法
- oracle如何修改initial参数,oracle初始化参数设置
- paip.网站接入QQ登录总结
- Axure RP 9 常用快捷键
- Java实现仿win10计算器——微升级版
- 再见PDF提取收费!我用100行Python代码搞定!去你的收费!
- Mathematics English Vocabulary (Cited)
- 舒亦梵:几条投资理念,决定你是否具有富人思维