C++(三十四) — 友元函数、友元类
友元是可以访问类的私有成员和保护成员的外部函数。由 friend 修饰,不是本类的成员函数,但是在它的函数体中可以通过对象名访问本类的私有和保护成员。
友元关系不可传递,且是单向的。
友元函数:声明为友元的一般函数或是另一个类的成员函数;
友元类:友元类的所有成员函数都是某个类的友元函数。应用场景较少。
1、友元函数
应用于运算符重载多一些。
#include <iostream>
#include <cmath>
using namespace std; //友元函数举例
class Point {
public:
Point(int xx = , int yy = )
{
X = xx; Y = yy;
}
int GetX() { return X; }
int GetY() { return Y; }
friend float fDist(Point &a, Point &b);
private:
int X, Y;
};
//友元函数的实现
float fDist(Point &p1, Point &p2)
{
//通过对象访问私有数据成员
double x = double(p1.X - p2.X);
double y = double(p1.Y - p2.Y);
return float(sqrt(x*x + y*y));
}
void main()
{
Point myp1(, ), myp2(, );
cout << "The distance is: ";
cout << fDist(myp1, myp2) << endl;
system("pause");
}
2、友元类
应用较少,了解即可。
#include <iostream>
using namespace std; class A {
public:
friend class B;//在 B类中可以访问 A类 的私有成员、私有函数。 // 友元类声明的位置和 public/private 没有关系。
friend void modifyA(A *pA, int _a); //该函数是 类A 的好朋友
A(int a=, int b=)
{
this->a = a;
this->b = b;
}
int getA()
{
return this->a;
}
private:
int a, b;
}; void modifyA(A *pA, int _a)
{
pA->a = _a;
}
//友元类使用场景较少
class B
{
public:
void Set(int a)
{
Aobject.a = a;
}
void printB()
{
cout << Aobject.a << endl;
}
private:
A Aobject;
};
void main()
{
A a1(, );
cout << a1.getA() << endl;
modifyA(&a1, );
cout << a1.getA() << endl; B b1;
b1.Set();
b1.printB();
system("pause");
}
C++(三十四) — 友元函数、友元类的更多相关文章
- python学习三十四天函数高阶函数定义及用法
python函数高阶函数是把函数当成一个变量,传递给函数作为参数,或者函数的返回值里面有函数,都称为高阶函数, 1,把函数作为参数传递 def dac(x,y): return x+y def tes ...
- 孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习
孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.close() 当一个file对象执行此方法时,将关闭当前 ...
- 不可或缺 Windows Native (20) - C++: 友元函数, 友元类
[源码下载] 不可或缺 Windows Native (20) - C++: 友元函数, 友元类 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 友元函数 友元类 示例演 ...
- Java进阶(三十四)Integer与int的种种比较你知道多少?
Java进阶(三十四)Integer与int的种种比较你知道多少? 前言 如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类:int的初值 ...
- NeHe OpenGL教程 第三十四课:地形
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- SQL注入之Sqli-labs系列第三十四关(基于宽字符逃逸POST注入)和三十五关
开始挑战第三十四关和第三十五关(Bypass add addslashes) 0x1查看源码 本关是post型的注入漏洞,同样的也是将post过来的内容进行了 ' \ 的处理. if(isset($_ ...
- spring boot 常见三十四问
Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家. 问题一 Spring Boot.Spring MVC 和 Spring 有什么区别 ...
- 第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息
第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息 crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址 有多 ...
- FreeSql (三十四)CodeFirst 迁移说明
FreeSql 支持 CodeFirst 迁移结构至数据库,这应该是(O/RM)必须标配的一个功能. 与其他(O/RM)不同FreeSql支持更多的数据库特性,而不只是支持基础的数据类型,这既是优点也 ...
- Python进阶(十四)----空间角度研究类,类与类之间的关系
Python进阶(十四)----空间角度研究类,类与类之间的关系 一丶从空间角度研究类 对象操作对象属性 class A(): address = '沙河' def __init__(self, na ...
随机推荐
- jquery创建一个新的节点对象(自定义结构/内容)的好方法
jq创建一个新的节点对象,这对一些自定义功能很有帮助,而且可以随意控制对象的结构与内容,何乐而不为呢,看到这里,相信有些朋友已经按耐不住了,好记下来为大家介绍实现方法,感兴趣的朋友可以了解下哦 < ...
- 【sql server inject】使用动态查询执行sql语句实例
应某少年要求授权测试一个存在报错注入点的站点,可读取数据库名,但是sqlmap执行–os-shell选项就会莫名当掉: 分步骤测试了几次,发现xp_cmdshell是开启状态,但用sqlmap注入却无 ...
- Selenium登录126邮箱,chrome定位不到账号输入框解决办法
使用id定位Message: no such element: Unable to locate element: {"method":"id","s ...
- c# stmp邮件发送
最近用到了邮件发送功能,因为stmp设置.参数传递错误等一些问题走了弯路,虽然代码很简单,这里还是记录一下,方便下次查阅. 用个人163邮箱测试的邮件发送 class Program { static ...
- ffmpeg.编译(20191129)
1.一步步实现windows版ijkplayer系列文章之一——Windows10平台编译ffmpeg 4.0.2,生成ffplay - HarlanC - 博客园.html(https://www. ...
- 如何优雅的处理 async/await 异常
参考链接:https://cloud.tencent.com/developer/article/1470715 参考链接:https://www.jianshu.com/p/2935c0330dd2
- setInterval【计时器】
~function(){ const nextPushTime = $('#nextPushTime_promotion_push'); const prevTime = new Date('2017 ...
- 【MIT 6.824 】分布式系统 课程笔记(二)Lecture 03 : GFS
Lecture 03 : GFS 一.一致性 1, 弱一致性 可能会读到旧数据 2, 强一致性 读到的数据都是最新的 3, 一致性比较 强一致性对于app的写方便, 但是性能差 弱一致性有良好的性能, ...
- AS3.0 位图翻转、旋转
/* * * *-------------------------* * | *** 位图翻转.旋转 *** | * *-------------------------* * * 作 者:fengz ...
- 题解-APIO2019桥梁
problem \(\mathrm {loj-3145}\) 题意概要:给定一张 \(n\) 点 \(m\) 边的无向图,边有边权,共 \(q\) 次操作,每次会将第 \(x\) 条边的权值改为 \( ...