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 ...
随机推荐
- app--Android 稳定性测试方案
标准的崩溃日志:Android 应用一般使用 Java 语言开发,在不作特殊处理的情况下,遇到未处理的异常时,会弹框提示“程序遇到异常,即将退出”(有些手机框中提示语不同, 或不弹框).同时会将异常的 ...
- 微信小程序之 语言特点
主页面的CSS样式默认为index.wxss,无需引入
- 找出整数数组中出现次数超过数组长度一半的元素(Java)
Question:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字 package com.study.zhipengs.test; import java.util.Arrays; im ...
- redhat与zlib兼容性问题?
今天在redhat 6.3 x64版本上安装了zlib,安装完后可以正常使用,就是发现gedit使用有点异常——无法启动,当时也没在意,但是后来重启电脑后出现桌面背景图片后就不弹出登陆窗口了,但是进命 ...
- Kubernetes(k8s)目录
Kubernetes(k8s)目录 Kubernetes集群安装(亲测有效)
- 024 Android 自定义样式对话框(AlertDialog)
1.AlertDialog介绍 AlertDialog并不需要到布局文件中创建,而是在代码中通过构造器(AlertDialog.Builder)来构造标题.图标和按钮等内容的. 常规使用步骤(具体参见 ...
- java8 time包的简单使用
import com.sun.org.apache.xml.internal.res.XMLErrorResources_tr; import java.text.DateFormat; import ...
- c++ 编译 curl 报错 数组‘__curl_rule_01__’的大小为负 解决方法
背景:在原有的项目GCC编译环境下(arm-linux 32位),增加x86-linux 64位的编译环境,编译curl库的时候发生错误. 其他:编译服务器为64位Centos 编译错误提示 /inc ...
- ~jmeter解决csrftoken登录问题
一.登录接口 url:http://192.168.163.128:/user/login/ 请求方法:post 请求参数: account:用户名 password:登录密码 remember:是否 ...
- Redis 的基本操作、Key的操作及命名规范
Redis基本操作 查看数据的状态 pong redis 给我们返回 PONG,表示 redis 服务 运行正常 redis 默认用 使用 16 个 库 • Redis 默认使用 16 个库,从 0 ...