C++友元函数和友元类用法详解

本文详细介绍了C++中的友元机制,包括友元函数和友元类的用法。友元函数是能直接访问类私有成员的非成员函数,而友元类的所有成员函数都是另一个类的友元。虽然友元可以提高程序效率,但破坏了类的封装性。文章还给出了友元关系的特点以及如何使用友元实现特定功能的代码示例。
摘要由CSDN通过智能技术生成

 在C++中,我们使用类对数据进行了隐藏和封装,类的数据成员一般都定义为私有成员,成员函数一般都定义为公有的,以此提供类与外界的通讯接口。但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数。除了友元函数外,还有友元类,两者统称为友元。友元的作用是提高了程序的运行效率(即减少了类型检查和安全性检查等都需要时间开销),但它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。

友元函数 : 
       友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend,其格式如下:
       friend 类型 函数名(形式参数);
       友元函数的声明可以放在类的私有部分,也可以放在公有部分,它们是没有区别的,都说明是该类的一个友元函数。
       一个函数可以是多个类的友元函数,只需要在各个类中分别声明。
       友元函数的调用与一般函数的调用方式和原理一致。
友元类 : 
       友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。       
       当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类的友元类。定义友元类的语句格式如下&

  • 113
    点赞
  • 398
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 22
    评论
友元类是指在一个类中,可以访问另一个类的私有成员和保护成员。使用友元类可以实现一些特殊的功能,如让两个类之间互相访问私有成员。下面是使用友元类的一些基本步骤: 1. 声明友元类 在要访问另一个类的私有成员或保护成员的类中,需要声明另一个类为友元类。例如: ```c++ class B; class A { public: void func(B& b); private: int x; friend class B; }; ``` 在上面的例子中,类A中声明了类B为友元类,这样类B就可以访问类A中的私有成员x。 2. 定义友元类 在被声明为友元类的类中,需要定义友元类。例如: ```c++ class A; class B { public: void func(A& a); private: int y; friend class A; }; void B::func(A& a) { a.x = 10; // 访问类A的私有成员x } ``` 在上面的例子中,类B中定义了一个函数func,参数是类A的引用。由于类A声明了类B为友元类,因此在函数func中可以访问类A的私有成员x。 3. 使用友元类 使用友元类很简单,只需要在需要访问私有成员或保护成员的地方调用友元类中的函数即可。例如: ```c++ int main() { A a; B b; b.func(a); // 访问类A的私有成员x return 0; } ``` 在上面的例子中,创建了类A的对象a和类B的对象b。在main函数中调用了类B中的函数func,传入了类A的对象a作为参数,这样就可以访问类A的私有成员x了。 需要注意的是,虽然使用友元类可以访问另一个类的私有成员和保护成员,但这并不是一个好的设计习惯。友元类破坏了类的封装性,会导致代码的可维护性变差,因此应该尽量避免使用友元类
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大王算法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值