您的位置:

深入理解C++中友元类的使用

一、友元类概述

在C++中,友元是一种机制,可以在类之间共享访问,允许类中的一个成员函数或一个类访问另一个类的私有或受保护成员。一般而言,友元是针对类而言的,它可以是一个函数,也可以是类,是一种授权机制,即授权某些指定的类或函数访问自己的私有成员,也可以授权其他的类或函数访问自己所在类的私有成员。在C++中,友元可以被声明为全局函数、类的成员函数以及类本身。

二、友元类使用场景

友元类是C++中提供的一种特殊情况,它授权一个类可以访问另一个类的私有成员。有一些情况下,为了方便或者考虑到安全等因素,需要在类之间设定友元关系,常见的使用场景如下:

1. 子类访问父类私有成员

一个子类必须通过继承才能访问父类的成员,但是私有成员是不能被继承的,因此,如果需要在子类中访问父类的私有成员,可以通过将子类声明为父类的友元类实现。

class Parent{
private:
    int num;
friend class Child;
};
class Child:public Parent{
public:
    void show(){
        cout<<"The private member of parent:"<<
   


    

2. 不同类之间共享私有成员

在某些情况下,需要在两个不相关的类之间共享私有成员,可以使用友元类实现,一般情况下,这个友元类不需要访问其他类的成员,只需要实现对该类私有成员的访问即可。

class A{
private:
    int num;
    friend class B;
};
class B{
public:
    void show(A& a){
        cout<<"The private member of A:"<<
      


       

3. 类与非成员函数共享私有成员

有的时候,需要在类中共享私有成员给非成员函数使用,我们也可以通过将非成员函数声明为该类的友元函数实现,这样就可以在非成员函数中直接访问到该类的私有成员。

class Example{
private:
    int num;
    friend void show(Example& e);
};
void show(Example& e){
    cout<<"The private member of Example:"<<
         


          

三、友元类的注意事项

在使用友元类时,需要注意以下几点:

1. 友元关系不能被继承

如果一个类A是类B的友元类,那么A的子类不一定是类B的友元类。如果需要将B的私有成员授权给A的子类,需要在A的子类中再次声明友元关系。

2. 友元类不具有传递性

如果类A是类B的友元类,类B是类C的友元类,但是类A和类C之间并没有友元关系,那么类A无法访问类C的私有成员。

3. 友元关系是单向的

如果类A是类B的友元类,那么A可以访问B的私有成员,但是B无法访问A的私有成员。

四、总结

友元类是C++提供的一种机制,可以让指定的类或函数访问另一个类的私有成员。使用友元类可以使代码更加灵活和安全。但是需要注意,友元关系不具有继承性和传递性,且是单向的。

深入理解C++中友元类的使用

2023-05-17
python基础学习整理笔记,Python课堂笔记

2022-11-21
java方法整理笔记(java总结)

2022-11-08
python学习日记day4(大学python笔记整理)

2022-11-13
java笔记,大学java笔记

2022-11-28
一篇c语言笔记,c语言入门笔记

2022-12-02
c语言笔记讲解,c语言程序笔记

2022-11-23
5000元笔记本电脑

随着科技的不断发展,笔记本电脑已经成为了现代人生活中必不可少的工具。 随着科技的不断发展,笔记本电脑已经成为人们生活中必不可少的工具。在如今数字化时代的到来,人们对信息的需求也越来越高了,而笔记本作为

2023-12-08
java笔记,尚硅谷java笔记

2022-12-01
java学习笔记(java初学笔记)

2022-11-14
python课堂整理32(python笔记全)

2022-11-12
基础c语言笔记,C语言笔记

2023-01-06
我的python笔记06(Python)

2022-11-14
python的用法笔记本(笔记本学python)

2022-11-16
阿里云笔记的功能与使用详解

2023-05-21
c到c语言笔记的简单介绍

2022-11-24
印象笔记记录java学习(Java成长笔记)

2022-11-12
数据库的笔记mysql,数据库管理系统笔记

2022-11-24
js高级程序设计笔记14(js高级程序设计笔记14页)

本文目录一览: 1、JavaScript高级程序设计 该怎么看 2、JavaScript学习笔记之数组基本操作示例 3、JS中有关sort以及return的问题 JavaScript高级程序设计 该怎

2023-12-08
javascript入门笔记1的简单介绍

2022-11-18