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日

相关文章

  • C语言实现五子棋小游戏

    C语言实现五子棋小游戏攻略 1. 环境准备 在开始编写五子棋小游戏前,需要先确定所用的开发工具以及环境。 1.1 开发工具 可以使用任何一种 C 语言开发工具,如 Visual Studio、Code::Blocks、Dev-C++等。本攻略以 Code::Blocks 为例进行讲解。 1.2 环境配置 安装 Code::Blocks 后,需要进行一些环境配…

    C 2023年5月23日
    00
  • C语言的基本语法详解

    下面是详细讲解“C语言的基本语法详解”的完整攻略: C语言的基本语法详解 数据类型 C语言中的数据类型包括基本数据类型和构造类型,基本数据类型包括整型、浮点型、字符型、布尔型;构造类型包括数组、结构体、共用体、枚举等。 整型 整型包括有符号整型和无符号整型两种,其中有符号整型可以表示负数。 int num1 = 10; // 有符号整型 unsigned i…

    C 2023年5月22日
    00
  • C 语言基础教程(我的C之旅开始了)[三]

    C 语言基础教程(我的C之旅开始了)[三] 完整攻略 在这篇文章中,作者主要介绍了C语言中的条件语句——if语句和switch语句。具体的内容包括以下几个方面: 1. if语句 if是C语言中最常用的条件语句之一,在语法上非常简单,格式为: if (表达式) { 代码块; } 其中,表达式可以是任何可以返回值的C表达式,代码块则是需要执行的语句组合。 在文章…

    C 2023年5月23日
    00
  • C++实现图书馆管理系统

    C++实现图书馆管理系统 概述 图书馆管理系统是一种基于计算机技术的,将各种机械设备取代,并能够更好地服务大众的管理系统。其原理是以计算机为核心,采用自动化技术,计算机网络技术,数据采集技术等先进技术对图书馆藏书、读者、借还书等活动进行管理。 使用C++编程语言进行开发,能够使用面向对象的编程技术,使得代码结构清晰,易于维护和扩展。在此,将介绍如何使用C++…

    C 2023年5月23日
    00
  • Marshall Monitor II A.N.C.降噪蓝牙耳机30天详细评测

    Marshall Monitor II A.N.C.降噪蓝牙耳机30天详细评测 概述 本文介绍Marshall Monitor II A.N.C.降噪蓝牙耳机的使用体验,并根据30天的长时间使用给出评测。 外观设计 Marshall Monitor II A.N.C.耳机采用了传统的翻盖式设计,整个耳机以黑色为主色调,搭配铜色的镀金LOGO,非常时尚。耳机外…

    C 2023年5月22日
    00
  • 菜鸟记录:c语言实现PAT甲级1004–Counting Leaves

        好消息:与上题的Emergency是同样的方法。坏消息:又错了&&c++真的比c方便太多太多。 A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child.…

    C语言 2023年4月17日
    00
  • C语言数组指针表示法

    C语言数组指针表示法是指使用指针访问数组元素的方法。在使用中,我们可以将数组名作为指针使用,指向数组的第一个元素,通过加减指针的偏移量来访问数组中的其他元素。 基本使用方法 定义数组,声明指针 c int a[5] = {1, 2, 3, 4, 5}; int *p; 将数组名作为指针使用,指向数组的第一个元素 c p = &a[0]; // 或者 …

    C 2023年5月9日
    00
  • Python实现复杂对象转JSON的方法示例

    下面就给出一篇详细的攻略,以帮助你理解“Python实现复杂对象转JSON的方法示例”。 简介 在Python开发中,我们经常需要将一些复杂的数据结构转换为JSON格式,便于数据的传输和存储。本文将介绍如何使用Python实现复杂对象转JSON的方法示例。 示例1:使用json.dumps()方法 在Python中,我们可以使用json模块中的dumps()…

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