c++编程思想2 --友元存储控制

 友元friend在c++中的应用 

我们知道在c++的类访问权限中,private和 protected在类外面进行访问的时候 会因为权限而不能访问 ,友元就解决了这个问题 。

可以这样理解,他为外部的 函数 或者类 进行了 访问授权,其实这已经超出OOP的范畴,但是对于C++而言是以实用为主,所以说C++并不是完全面向对象的语言

C++这一特性就破坏的C++的安全性 。

我们要使用友元函数或者类 我们就要在类的定义中用 friend 进行相应的声明 。。。

 

下面是友元函数的利用 ,我们利用友元函数进行对于类的私有成员和保护成员进行修改

#include <iostream>
using namespace std ;
class  A
{
public:
 A()
 {
  this->x=0;
  this->y=0 ;
 }
 void Show()
 {
  cout<<"x="<<this->x<<endl;
  cout<<"y="<<this->y<<endl;
 }
 friend void Add(A*) ;
private:
 int x ;
protected:
 int y;
};
void Add(A* a)
{
 a->x++;
 a->y++;
}
void main()
{
    A * a=new A() ;
 Add(a) ;
 a->Show() ;
}

 下面是利用对于内部类进行授权进行访问,对于内部类来说我们 在类内部声明,但是并没有赋予内部类访问包容类私有成员的权限所以我们要利用friend将内部类声明

为全局. 注意在java中 内部类是具有访问外部类的权限的 。

#include <iostream>
using namespace std ;
class A
{
private:
  int x ;
public :
 A()
 {
  this->x=0 ;
 }
 class B
 {
 public:
  void add(A *tem)
  {
   tem->x++;
  }
 };
 friend A::B ;    //对内部类进行全局声明
 void show()
 {
     cout<<"x="<<this->x<<endl ;
 }
 
};
void main()
{
 A::B c ;   
 A a ;
 c.add(&a);
    a.show();
}

3、利用友元类进行访问

#include <iostream>
using namespace std ;
class A
{
public:
 A()
 {
  x=0 ;
 }
 void show()
 {
  cout<<"x="<<x<<endl ;
 }
 friend  class  B ;
private:
 int x ;
};
class  B
{
public:
 A a ;
 void add()
 {
  a.x++ ;
 }
};
void main()
{
 B  b;
 b.add() ;
 b.a.show() ;
}

 

转载于:https://www.cnblogs.com/yuedongwei/archive/2011/12/29/4145558.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377863.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WordPress Event Easy Calendar插件多个跨站请求伪造漏洞

漏洞名称&#xff1a;WordPress Event Easy Calendar插件多个跨站请求伪造漏洞CNNVD编号&#xff1a;CNNVD-201309-083发布时间&#xff1a;2013-09-11更新时间&#xff1a;2013-09-11危害等级&#xff1a; 漏洞类型&#xff1a;跨站请求伪造威胁类型&#xff1a;远程CVE编号&…

XML转txt格式脚本

一、东北大学老师收集的钢材缺陷数据集是XML格式的&#xff0c;但是YOLOv5只允许使用txt文件标签 例如其中一种缺陷图片所对应的标签&#xff1a;crazing_1.xml <annotation><folder>cr</folder><filename>crazing_1.jpg</filename><source&…

python程序生成exe_使用Python程序生成QR代码的Python程序

python程序生成exeQR code is a short form of the quick response code. It is a type of matrix barcode that contains some information like some specific link, important message, email-id, etc. In Python, the qrcode module is used to generate the QR code of so…

leetcode 242. 有效的字母异位词 思考分析

题目 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 我们先考虑低阶版本&#xff0c;认为字符只有26种可能&#xff0c;然后将a ~ z的字符映射到数组的索引0 ~ 25&#xff0c;数组中存放的则是该索引出现的频次。 记录下s的频次和t的频次…

总结一下ERP .NET程序员必须掌握的.NET技术,掌握了这些技术工作起来才得心应手...

从毕业做.NET到现在&#xff0c;有好几年了&#xff0c;自认为只能是达到熟练的水平&#xff0c;谈不上精通。所以&#xff0c;总结一下&#xff0c;自己到底熟练掌握了哪些.NET方面的开发技术&#xff0c;以此对照&#xff0c;看看还有哪些不足&#xff0c;欢迎补充。 1 .NET …

js \n直接显示字符串_显示N个字符的最短时间

js \n直接显示字符串Problem statement: 问题陈述&#xff1a; You need to display N similar characters on a screen. You are allowed to do three types of operation each time. 您需要在屏幕上显示N个相似的字符。 每次允许您执行三种类型的操作。 You can insert a c…

示例 Demo 工程和 API 参考链接

Camera Explorer&#xff1a;有关 Windows Phone8 中有关增强 Camera API 的使用。文章链接 Filter Effects&#xff1a;对拍摄的照片或者图片库中的照片应用 Nokia Imaging SDK 中的滤镜。文章链接 Filter Explorer&#xff1a;演示了对新拍摄图片或者现有图片的编辑功能&…

三、标签准备

所有操作均在anaconda中的自己配置的环境下进行 一、安装labelimg 因为YOLO模型所需要的样本标签必须是txt类型&#xff0c;本人使用labelimg软件进行对图像进行打标签操作。 pip install pycocotools-windows pip install pyqt5 pip install labelimg 通过labelimg命令打…

ubuntu 8.04安装应用软件Can't find X includes错误解决办法

系统很小。应用软件都的自己装。 首先把 APT’s database is not updated. # apt-get update    # apt-get upgrade 再装其它软件。 make xconfigure 无法运行时&#xff1a; apt-get install qt3-dev-tools 编译QVFB  是出现&#xff1a; 出现&#xff1a;C preproces…

leetcode 39. 组合总和 思考分析

目录1、题目2、思考分析3、未经优化代码4、剪枝优化1、题目 给定一个无重复元素的数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 2、思考分析 解空间树宽度部分即数…

java uuid静态方法_Java UUID equals()方法与示例

java uuid静态方法UUID类equals()方法 (UUID Class equals() method) equals() method is available in java.util package. equals()方法在java.util包中可用。 equals() method is used to check whether this object equals to the given object or not. equals()方法用于检…

一、机器学习概念

一、何为机器学习(Mechine Learning)&#xff1f; 答&#xff1a;利用已有数据(经验)&#xff0c;来训练某种模型&#xff0c;利用此模型来预测未来。机器学习是人工智能的核心Mechine Learning。 例如&#xff1a;你和狗蛋儿7点在老槐树下集合&#xff0c;如何一块约去开黑&a…

Java线程新特征——Java并发库

一、线程池 Sun在Java5中&#xff0c;对Java线程的类库做了大量的扩展&#xff0c;其中线程池就是Java5的新特征之一&#xff0c;除了线程池之外&#xff0c;还有很多多线程相关的内容&#xff0c;为多线程的编程带来了极大便利。为了编写高效稳定可靠的多线程程序&#xff0c;…

第一篇博文

刚刚申请博客&#xff0c;开通了&#xff0c;很高兴。但是由于这几天考试比较多&#xff0c;等考完之后&#xff0c;再开始正式写博客&#xff0c;与诸君共进步&#xff01; 2012/1/1 18:20 转载于:https://www.cnblogs.com/zhenglichina/archive/2012/01/01/2309561.html

leetcode 40. 组合总和 II 思考分析

题目 给定一个数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用一次。 思考以及代码 如果我们直接套用39题的思路&#xff0c;那么就会出现重复的组合。 重复组合的…

java vector_Java Vector size()方法与示例

java vector矢量类size()方法 (Vector Class size() method) size() method is available in java.util package. size()方法在java.util包中可用。 size() method is used to return the size (i.e. the number of the element exists) of this Vector. size()方法用于返回此V…

二、线性回归

一、回归 可以拿正态分布为例&#xff0c;比如身高&#xff0c;若平均身高为1.78m&#xff0c;绝大多数人都是1.78m左右&#xff0c;超过2m的很少&#xff0c;低于1m的也不多。 很多事情都会回归到一定的区间之内&#xff0c;即回归到平均值。 机器学习没有完美解&#xff0c…

【转】HMM学习最佳范例五:前向算法1 .

五、前向算法&#xff08;Forward Algorithm&#xff09; 计算观察序列的概率&#xff08;Finding the probability of an observed sequence&#xff09; 1.穷举搜索&#xff08; Exhaustive search for solution&#xff09;  给定隐马尔科夫模型&#xff0c;也就是在模型参…

vs 字体

看代码看得眼疼不能不说是程序员的恶梦&#xff0c;那么&#xff0c;选择适当的字体也算是对自己的救赎吧。周末闲得无聊&#xff0c;在网上乱逛&#xff0c;搜索了一些资料整理一下给大家分享&#xff0c;仅作记录而已&#xff0c;参考使用&#xff1a; 1.一个编程人员痛苦的选…

leetcode 349. 两个数组的交集 思考分析

题目 给定两个数组&#xff0c;编写一个函数来计算它们的交集。 1、暴力双for循环 class Solution { public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {vector<int> result;vector<int> res;if(nums1.siz…