C++如何使用友元类

友元类在C++中的应用与理解
本文探讨了C++中的友元类概念,解释了为何要使用友元类来实现类之间的特殊访问权限。通过示例展示了如何声明和使用友元类,使得友元类能够直接访问另一类的私有或保护成员,从而实现特定的功能需求,如ComputerServer类对Computer类的数据成员的直接操作。同时,也提及了FaceAlignment类对其友元类FaceInst的友元关系。

为什么要使用友元类

ComputerServer类作为Computer类得友元类, 那么ComputerServer类的所有成员函数, 就可以直接访问对应类的所有数据成员

使用友元类,和友元函数时,使用friend关键字进行声明即可,与访问权限无关,可以写在private/public/protected任意权限内。

Computer类                          ComputerServer类
public:                             public:
friend class ComputerServer         setUpgrade()
                                    setCpuPower()
private:                            setCpuCore
cpu
cpuPower
cpuCore
#include <string>
#include "ComputerServer.h"

using namespace std;

class Computer{
public:
    Computer();
    
    //友元类, 此时都在ComputerServer类里
    //都可以访问Computer的所有数据
    friend class ComputerServer;
    
    void description();
private:
    string cpu; //cpu芯片
    int cpuPower; //cpu性能
    int cpuCore; //cpu内核
}

ComputerServer是Computer类的友元类, 都可以访问Computer的所有数据。

void ComputerServer::setUpgrade(Computer *computer)
{
   computer->cpu = 'i9';
}
class FaceAlignment: public FaceModule
{
public:
   FaceAlignment()
   {
      
   }
   ~FaceAlignment()
   {

   }
   friend class FaceInst;
}
FaceInst是FaceAlignment的友元类。

友元类是指在一个类中,可以访问另一个类的私有成员和保护成员。使用友元类可以实现一些特殊的功能,如让两个类之间互相访问私有成员。下面是使用友元类的一些基本步骤: 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了。 需要注意的是,虽然使用友元类可以访问另一个类的私有成员和保护成员,但这并不是一个好的设计习惯。友元类破坏了类的封装性,会导致代码的可维护性变差,因此应该尽量避免使用友元类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值