【C++基础】类和对象——友元
【C++基础】类和对象——友元
友元的概念
在C++中,不能被外部访问的私有属性,通过友元可以访问。
友元的关键字:friend
友元的三种实现
- 全局函数做友元
- 类做友元
- 成员函数做友元
一、全局函数做友元
函数名复制到类内,并在开头加上friend关键字;
示例:
#include<iostream>
using namespace std;class Student
{//友元可以访问私有(private)内容friend void showStudent(Student* s);public:string name;int age;Student(){name = "张三";age = 10;gender = "彩虹小马";}private:string gender;
};void showStudent(Student* s)
{cout << "看看你的性别:" << s->gender;
}void main()
{Student s;showStudent(&s);
}
输出:
二、类做友元
Teacher类
是Student类
的友元。
那个在Teacher类
内可以访问到Student类
内的私有属性。
但创建的Teacher对象
不能访问到Student类
内的私有属性。
示例:
#include<iostream>
using namespace std;class Teacher;class Student
{//友元可以访问私有(private)内容friend class Teacher;public:string name;int age;Student();private:string gender;
};//类外实现
Student::Student()
{name = "张三";age = 10;gender = "彩虹小马";
}class Teacher
{public:string name;void visit(){cout << "看看性别:" << s->gender << endl;}Teacher(){s = new Student;}private:Student* s;
};void main()
{Teacher t;t.visit();//t.s.gender; 不能访问
}
输出:
三、成员函数做友元
这个友元就是在套娃,简单说就是先声明,声明的东西拿来做友元,最后再实现。先看示例,看完在分析。
友元成员函数和构造函数需要外部实现,不然会报未定义错误。
示例:
#include<iostream>
using namespace std;class Student;class Teacher
{public:string name;//visit函数做友元void visit();Teacher();private:Student* s;
};class Student
{//友元可以访问私有(private)内容friend void Teacher::visit();public:string name;Student(){name = "张三";gender = "彩虹小马";}private:string gender;
};Teacher::Teacher()
{s = new Student;
}void Teacher::visit()
{cout << "visit看看性别:" << s->gender << endl;
}void main()
{Teacher t;t.visit();
输出:
成员函数友元的声明实现:
声明:类B类A
{public:声明:函数a声明:构造函数A
private创建对象B
}类B
{友元 返回值 类A::函数a
public:构造函数B
private:属性b
}实现:构造函数A
{对象B = new 类B
}实现:函数a
{访问属性b
}
注意事项:
- 友元的实现
- 构造函数的实现
- 提供私有属性的类B
声明类B
实现类B
是不是先讲类的声明和实现,再讲友元的声明和实现会好理解点?
【C++基础】类和对象——友元相关推荐
- Python基础(类与对象)
Python基础(类与对象) 一.编程的两大思想 面向过程和面向对象 面向过程 面向对象 区别 事物比较简单,可以用线性的思维去解决 事物比较复杂,使用简单的线性思维无法解决 共同点:面向对象和面向过 ...
- Python基础——类与对象
Python基础--类与对象 Python基础--类与对象 类与对象 数据类型 对象 类的创建 创建语法 类的创建 对象的创建 对象调用类中的内容 类属性,类方法,静态方法 类属性 访问类属性 类方法 ...
- 「地表最强」C++核心编程(七)类和对象--友元
环境: 编译器:CLion2021.3:操作系统:macOS Ventura 13.0.1 文章目录 一.全局函数做友元 二.类做友元 三.成员函数做友元 地表最强C++系列传送门: 「地表最强」C+ ...
- ios开发之OC基础-类和对象
ios开发之OC基础-类和对象 本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录 ...
- ios c语言调用oc方法,ios开发之OC基础-类和对象(示例代码)
本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...
- Java基础--类与对象
2019独角兽企业重金招聘Python工程师标准>>> 一.类与对象 类是对一类事物描述,是抽象的.概念上的定义. 对象是实际存在的该类事物的每个个体,因而也称实例(instan ...
- Java 基础——类和对象
Java作为一种面向对象语言.支持以下基本概念: •多态 •继承 •封装 •抽象 •类 •对象 •实例 •方法 •消息解析 本节我们重点研究类与对象的概念. 对象:对象是类的一个实例,有状态和行为.例 ...
- 不能将brassplus类型的值分配到brass类的实体_Java 基础 - 类与对象
类.对象和引用的关系 类和对象的关系 类是对象的模版,对象是类的一个实例,一个类可以有很多对象 一个Java程序中类名相同的类只能有一个,也就是类型不会重名 一个对象只能根据一个类来创建 引用和类以及 ...
- python编程基础—类与对象
1.类的声明与定义 Python 是一门面向对象的语言. 面向对象编程 - Object Oriented Programming(简称 OOP)是一种编程思想,在面向对象编程中,把对象作为程序的基本 ...
最新文章
- CISCO路由器产品配置手册
- KD树——k=1时就是BST,里面的数学原理还是有不明白的地方,为啥方差划分?...
- Vivado 时序分析(理论篇) 卷一
- ad中那个快捷键是重复上一部_Excel中的F4快捷键用的好,告别加班没烦恼!
- Docker学习总结(43)——Docker Compose 搭建Mysql主从复制集群
- django1.9 创建数据表
- php array_walk和array_walk_recursive对数组中的每个元素应用用户自定义函数
- SPSS 有调节的中介与有中介的调节【SPSS 042期】
- vb杨辉三角代码编写_杨辉三角怎样用VB写杨辉三角的完整代码 – 手机爱问
- OpenCV对图片的读写,像素值的访问,修改
- 常见的java设计模式
- ros与arduino通讯(一)ros_arduino_bridge功能包
- TJA1042T/3与国产CAN芯片SIT1042T/3性能对比
- deepin - PS CS6 弹出试用结束(解决方案)
- 什么是PMU(PMIC)【转】
- 牛腩新闻系统--.NET使用一般处理程序生成验证码
- java 稀疏贝叶斯算法_稀疏贝叶斯学习(SparseBayesianLearning).PDF
- 分布式技术与实战第六课 分布式缓存设计
- JS 逆向之 Hook
- scanf与getchar的区别
热门文章
- kafka 消息堆积解决
- Ubuntu 回收站 位置(处理回收站不能打开问题)
- java数据结构学习笔记-二叉树前、中、后序遍历
- 使用面向对象的思想,编写自定义描述狗的信息。设定属性包括:品种,年龄,心情,名字;方法包括:叫,跑
- 湘潭大学 计算机学院程诗婕,传播校园之声,讲好湘大故事 ——2019年度湘潭大学“十佳学生记者”和“优秀学生记者”颁奖典礼圆满落幕...
- matlab打靶法程序,打靶法(含Mtlab程序).doc
- 申请OV、EV证书需要什么资料?邓白氏编码是什么?
- animate用法 js原生_原生JS封装animate运动框架的实例
- COC部落又散了北京爱情故事
- 男生诡异世界观,是不是跟你想的不一样~