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

简介:  友元friend在c++中的应用  我们知道在c++的类访问权限中,private和 protected在类外面进行访问的时候 会因为权限而不能访问 ,友元就解决了这个问题 。 可以这样理解,他为外部的 函数 或者类 进行了 访问授权,其实这已经超出OOP的范畴,但是对于C++而言是以实用为主,所以说C++并不是完全面向对象的语言 C++这一特性就破坏的C++的安全性 。

 友元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() ;
}

 

目录
相关文章
|
存储 编译器 C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(一)
【C++】深入探索类和对象:初始化列表及其static成员与友元
456 2
|
存储 编译器 程序员
c++存储类
c++存储类
282 3
|
存储 编译器 程序员
c++的类(附含explicit关键字,友元,内部类)
本文介绍了C++中类的核心概念与用法,涵盖封装、继承、多态三大特性。重点讲解了类的定义(`class`与`struct`)、访问限定符(`private`、`public`、`protected`)、类的作用域及成员函数的声明与定义分离。同时深入探讨了类的大小计算、`this`指针、默认成员函数(构造函数、析构函数、拷贝构造、赋值重载)以及运算符重载等内容。 文章还详细分析了`explicit`关键字的作用、静态成员(变量与函数)、友元(友元函数与友元类)的概念及其使用场景,并简要介绍了内部类的特性。
585 0
|
安全 C++
【c++】继承(继承的定义格式、赋值兼容转换、多继承、派生类默认成员函数规则、继承与友元、继承与静态成员)
本文深入探讨了C++中的继承机制,作为面向对象编程(OOP)的核心特性之一。继承通过允许派生类扩展基类的属性和方法,极大促进了代码复用,增强了代码的可维护性和可扩展性。文章详细介绍了继承的基本概念、定义格式、继承方式(public、protected、private)、赋值兼容转换、作用域问题、默认成员函数规则、继承与友元、静态成员、多继承及菱形继承问题,并对比了继承与组合的优缺点。最后总结指出,虽然继承提高了代码灵活性和复用率,但也带来了耦合度高的问题,建议在“has-a”和“is-a”关系同时存在时优先使用组合。
1106 6
|
存储 算法 C++
【C++数据结构——图】图的邻接矩阵和邻接表的存储(头歌实践教学平台习题)【合集】
本任务要求编写程序实现图的邻接矩阵和邻接表的存储。需掌握带权有向图、图的邻接矩阵及邻接表的概念。邻接矩阵用于表示顶点间的连接关系,邻接表则通过链表结构存储图信息。测试输入为图的顶点数、边数及邻接矩阵,预期输出为Prim算法求解结果。通关代码提供了完整的C++实现,包括输入、构建和打印邻接矩阵与邻接表的功能。
864 10
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
517 5
【C++】深入探索类和对象:初始化列表及其static成员与友元(二)
【C++】深入探索类和对象:初始化列表及其static成员与友元
234 3
|
编译器 C语言 C++
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
312 2
|
编译器 C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(三)
【C++】深入探索类和对象:初始化列表及其static成员与友元
216 1
|
编译器 数据安全/隐私保护 C++
C++(十四) friend友元
友元机制允许非成员函数或类访问私有成员,提高程序效率,但会破坏封装性。友元可以是函数或类,并以关键字`friend`声明。友元函数不是成员函数,需通过对象访问私有成员。友元类使所有成员函数可访问另一个类的私有成员,常用于简化开发。友元声明位置灵活,但不影响访问控制。使用友元需注意其单向性和非传递性。