C++实例代码详解友元函数

C++实例代码详解友元函数

友元函数概念

友元函数是指可以访问一个类的私有成员和保护成员的非成员函数。友元函数不是类的成员函数,但是它可以访问类中的非公有成员。需要注意的是,友元函数不会被继承。

友元函数的语法格式如下:

friend return_type function_name( parameter_list );

其中,关键字 friend 声明了整个函数为友元函数,可以访问该类的私有成员和保护成员。return_type 指定函数的返回值类型,function_name 是函数名,parameter_list 是函数的参数列表。

友元函数的使用步骤

友元函数的使用步骤如下:

  1. 在类定义中声明友元函数,可以在类的任何区域声明,一般在 public、protected 或 private 区域之后声明。
  2. 实现友元函数,友元函数可以在类里面或外面定义。
  3. 调用友元函数。

友元函数的使用场景

友元函数在以下情况下应该使用:

  1. 当需要访问类的私有成员和保护成员,但是又不想成为类的成员函数,此时可以通过友元函数来实现。
  2. 当需要多个类之间相互访问非公有成员时,可以使用友元函数来实现。

示例一

#include <iostream>

using namespace std;

class CRectangle {
private:
    int width;
    int height;

public:
    CRectangle(int w, int h) : width(w), height(h) {}

    // 声明友元函数
    friend int getArea(CRectangle rect);
};

// 实现友元函数
int getArea(CRectangle rect) {
    return rect.width * rect.height;
}

int main() {
    CRectangle rect(3, 4);
    // 调用友元函数
    int area = getArea(rect);
    cout << "矩形面积为:" << area << endl;
    return 0;
}

在这个示例中,声明了一个 CRectangle 的友元函数 getArea,用来计算矩形的面积,该函数可以访问 CRectangle 的私有成员 widthheight

示例二

#include <iostream>

using namespace std;

class CCar;

class CDriver {
public:
    void drive(CCar *car);
};

class CCar {
private:
    int price;
    friend int getPrice(CCar car);
    friend void CDriver::drive(CCar *car);
};

// 实现友元函数
int getPrice(CCar car) {
    return car.price;
}

// 实现友元函数
void CDriver::drive(CCar *car) {
    cout << "正在开车,车的价格为:" << car->price << endl;
}

int main() {
    CCar car;
    car.price = 100000;
    CDriver driver;
    driver.drive(&car);
    return 0;
}

在这个示例中,声明了一个 CCar 类和一个 CDriver 类,CCar 类的 price 成员被声明为友元函数 getPrice 和友元类 CDriver 的成员函数 drive,这两个成员函数都可以访问 CCar 的私有成员 price。另外,CDriverdrive 成员函数拥有一个指向 CCar 对象的指针,通过指针来访问 CCar 的私有成员 price

以上是友元函数的详细讲解及实例代码,有任何问题可以提问。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实例代码详解友元函数 - Python技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • UG NX 7.5打开失败提示错误c0000005怎么办?

    下面是“UG NX 7.5打开失败提示错误c0000005”的完整攻略: 问题描述 当尝试在UG NX 7.5中打开文件时,可能会遇到以下错误提示: UG NX 7.5 打开失败。错误提示:错误c0000005。 这意味着系统或程序遇到了一个异常终止,导致无法正常打开文件。这可能是由于多种原因引起的。 解决方案 为了解决这个问题,您可以尝试以下方法: 方法一…

    C 2023年5月23日
    00
  • C语言实现循环打印星号图形再镂空

    下面是“C语言实现循环打印星号图形再镂空”的完整攻略。 基本思路: 通过循环嵌套打印出星号图形; 按照规定镂空区域,将对应位置上的星号替换为空格。 代码实现: 以下是一份示例代码,仅供参考: #include<stdio.h> int main() { int i,j,m,n; printf("请输入一个行数:"); scan…

    C 2023年5月30日
    00
  • C++ OpenMP简单介绍

    C++ OpenMP简单介绍 什么是OpenMP? OpenMP是一种可以实现线程并行的编程模型。它使用C/C++/Fortran这样的语言来编写程序,而不需要使用任何特定的库或API。OpenMP旨在提高程序的并行性,从而提高应用程序的性能。 如何使用OpenMP? 在C++中,OpenMP使用“pragma”来指定并行计算。这个指令告诉编译器何时开始并行…

    C 2023年5月23日
    00
  • C语言中如何进行字符串操作?

    C语言是一门强大的编程语言,它提供了多种字符串操作函数,让我们能够更方便地进行字符串处理。下面是一个详细的C语言字符串操作攻略。 字符串表示 C语言中,字符串是字符数组,以空字符(\0)结尾。例如: char str[] = "Hello, World!"; 在这个例子中,我们定义了一个字符数组 str,存储了字符串 “Hello, Wo…

    C 2023年4月27日
    00
  • C语言目标文件的详细讲解

    C语言目标文件的详细讲解 在C语言的编译过程中,有一个很重要的概念——目标文件。它是源文件经过编译器编译之后生成的一种二进制文件。目标文件通常用于连接器的链接过程中,将多个目标文件合并成一个可执行文件。 目标文件的种类 在C语言中,目标文件主要分为三种类型:可重定位目标文件、可执行目标文件和共享目标文件。 可重定位目标文件 可重定位目标文件是编译器编译完源代…

    C 2023年5月23日
    00
  • C++实现连连看游戏核心代码

    C++实现连连看游戏核心代码攻略 连连看游戏是一款十分流行的益智游戏,其核心代码实现在于判断两个图案能否被消去。本文将详细介绍C++实现连连看游戏核心代码的攻略。 步骤一:定义游戏盘面 在C++中实现游戏盘面通常使用二维数组,这里我们定义一个10×10的整型二维数组来表示游戏盘面。其中,0代表没有图案,正整数代表有不同种类的图案。 int board[10]…

    C 2023年5月24日
    00
  • visio中怎么插入公式? visio编辑公式的详细教程

    在 Visio 中插入公式,需要使用到 Visio 自带的公式编辑器 Equation Editor。接下来,我将为您详细介绍在 Visio 中如何插入和编辑公式的步骤。 步骤1:打开 Equation Editor 在 Visio 中将光标放在所要插入公式的位置,然后打开 Equation Editor 的方法有两种: 使用快捷键“Alt”+“=”,或者 …

    C 2023年5月22日
    00
  • C语言实现运动会管理系统

    C语言实现运动会管理系统攻略 运动会管理系统是一个基于C语言编写的管理软件。本文将详细讲解如何使用C语言实现运动会管理系统。 一、系统功能 运动会管理系统主要包括以下功能: 注册和登录:新用户可以注册账号,已有账号可以登录系统。 学生信息管理:包括添加、修改、查询和删除学生信息。 运动员报名和成绩管理:运动员可以报名参加比赛,并记录比赛成绩。 赛程安排管理:…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部