C++友元函数:声明与定义

友元函数在类外定义

友元函数在C++中被定义为类的友元函数,可以在类外单独定义。这意味着友元函数不是类的成员函数,它们被允许访问类的私有和受保护的成员。


// 声明
class MyClass {
   friend void myFriendFunc(MyClass obj);
   private:
      int x;
};

// 定义
void myFriendFunc(MyClass obj) {
   cout << "X的值是:" << obj.x << endl;
}

以上代码中,myFriendFunc()函数被声明为MyClass类的友元函数。 在定义中,我们可以访问类的私有变量x。

友元函数类外定义格式

友元函数的类外定义遵循以下格式:


返回类型 function-name (参数) {
   ... ... ...
}

友元函数怎么定义和使用

友元函数通过类的声明和定义来定义。在C++中,我们将友元函数的声明放在类的定义中,而将其定义放在类外。


#include 
using namespace std;

class Box {
   double width;
   public:
      friend void printWidth( Box box );
      void setWidth( double wid );
};

// 成员函数定义
void Box::setWidth( double wid ) {
   width = wid;
}

// 注意:printWidth() 不是任何类的成员函数
void printWidth( Box box ) {
   /* 因为 printWidth() 是 Box 的友元,它可以直接访问该类中的任何成员 */
   cout << "Width of box : " << box.width <<endl;
}

// 程序的主函数
int main() {
   Box box;
   // 使用成员函数设置宽度
   box.setWidth(10.0);
   // 使用友元函数输出宽度
   printWidth( box );
   return 0;
}

在上面的程序中,我们声明了一个Box类和一个printWidth()友元函数。printWidth()函数可以访问Box类中的所有成员。在setDoulbe()成员函数的定义中,我们将宽度width设置为wid,而printWidth()函数在输出时直接访问了width变量,这是由于它是一个Box类的友元函数。

友元函数必须在类的外部定义

在C++中,友元函数必须在类的外部定义。 这意味着,如果一个友元函数在类中没有定义,但在类外使用,将会产生一个编译错误。


class MyClass {
   friend void myFriend(MyClass obj);
   private:
      int x;
};

int main() {
  MyClass myObj;
  myFriend(myObj);  //会出错
  return 0;
}

void myFriend(MyClass obj) {
   cout <<"X的值是:" << obj.x << endl;
}

在上面的程序中,我们在主函数中试图访问MyClass类的myFriend()友元函数。由于我们在类外定义了这个函数,但没有在类定义中声明,因此编译器会产生一个错误。

简述友元函数的声明和定义方法

友元函数可以在类的定义中声明和在类外定义。在类的定义中,我们只需要在类的开始或结尾声明友元函数,并且不必定义它。
在类的外部定义友元函数时,我们需要先声明它后再定义它。 声明友元函数时,我们使用关键字friend并向函数传递参数,这样它就可以访问类的私有成员。

友元函数的声明和定义

在以下示例中,我们声明了一个叫做MyFunction的友元函数,并在程序结束时调用它:


#include 
using namespace std;

class MyClass {
   friend void MyFunction(MyClass&);  // 友元声明
   public:
      int hello() {return 0;}
};

int main() {
   MyClass obj;
   MyFunction(obj); // 友元函数调用
   return 0;
}

void MyFunction(MyClass &obj) {  // 友元定义
   cout << "Hello, World!" << obj.hello() << endl;
}

友元函数怎么定义

友元函数与一般的函数定义非常相似。 唯一的区别是,在友元函数的开头使用关键字friend。


#include 
using namespace std;

class MyClass {
   friend void MyFunction(MyClass&);
   public:
      int x;
};

/* 这是MyClass的友元函数定义,我们可以调用它 */
void MyFunction(MyClass &obj) {
   /* 可以访问类中的成员 */
   cout << "X的值是:" << obj.x << endl;
}

友元函数必须在类外定义吗

在C++中,友元函数必须在类外定义。 友元函数是被定义为类的友元的函数,因此它们需要在类的外部定义。 如果你仅仅在类中声明并不定义友元函数,编译器将会产生一个错误。

友元函数可以在类内定义吗

友元函数可以在类的内部进行定义,但这并不是最佳实践。 友元函数的定义应该放在类的外部,因为它们的目标是访问私有和受保护的成员,从而违反了类的数据抽象原则。 另外,将其定义与声明放在不同的地方会使程序代码更加可读。

完整代码示例:


#include <iostream>
using namespace std;

class Box {
   double width;
   public:
      friend void printWidth( Box box );
      void setWidth( double wid );
};

// 成员函数定义
void Box::setWidth( double wid ) {
   width = wid;
}

// 注意:printWidth() 不是任何类的成员函数
void printWidth( Box box ) {
   /* 因为 printWidth() 是 Box 的友元,它可以直接访问该类中的任何成员 */
   cout << "Width of box : " << box.width <<endl;
}

int main() {
   Box box;
   // 使用成员函数设置宽度
   box.setWidth(10.0);
   // 使用友元函数输出宽度
   printWidth( box );
   
   MyClass obj;
   MyFunction(obj); // 友元函数调用
    return 0;
}

// friend function它的名称不带类的作用域
class MyClass {
   friend void MyFunction(MyClass&);  // Friend Function Declaration 友元函数声明
   public:
      int hello() {return 0;}
};

void MyFunction(MyClass &obj) {  // 友元定义Function Definition
   cout << "Hello, World!" << obj.hello() << endl;
}

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/154051.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-15 03:24
下一篇 2024-11-15 03:24

相关推荐

  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python中capitalize函数的使用

    在Python的字符串操作中,capitalize函数常常被用到,这个函数可以使字符串中的第一个单词首字母大写,其余字母小写。在本文中,我们将从以下几个方面对capitalize函…

    编程 2025-04-29
  • Python中set函数的作用

    Python中set函数是一个有用的数据类型,可以被用于许多编程场景中。在这篇文章中,我们将学习Python中set函数的多个方面,从而深入了解这个函数在Python中的用途。 一…

    编程 2025-04-29
  • 单片机打印函数

    单片机打印是指通过串口或并口将一些数据打印到终端设备上。在单片机应用中,打印非常重要。正确的打印数据可以让我们知道单片机运行的状态,方便我们进行调试;错误的打印数据可以帮助我们快速…

    编程 2025-04-29
  • 三角函数用英语怎么说

    三角函数,即三角比函数,是指在一个锐角三角形中某一角的对边、邻边之比。在数学中,三角函数包括正弦、余弦、正切等,它们在数学、物理、工程和计算机等领域都得到了广泛的应用。 一、正弦函…

    编程 2025-04-29
  • Python3定义函数参数类型

    Python是一门动态类型语言,不需要在定义变量时显示的指定变量类型,但是Python3中提供了函数参数类型的声明功能,在函数定义时明确定义参数类型。在函数的形参后面加上冒号(:)…

    编程 2025-04-29
  • Python实现计算阶乘的函数

    本文将介绍如何使用Python定义函数fact(n),计算n的阶乘。 一、什么是阶乘 阶乘指从1乘到指定数之间所有整数的乘积。如:5! = 5 * 4 * 3 * 2 * 1 = …

    编程 2025-04-29
  • Python定义函数判断奇偶数

    本文将从多个方面详细阐述Python定义函数判断奇偶数的方法,并提供完整的代码示例。 一、初步了解Python函数 在介绍Python如何定义函数判断奇偶数之前,我们先来了解一下P…

    编程 2025-04-29
  • Python中的队列定义

    本篇文章旨在深入阐述Python中队列的定义及其应用,包括队列的定义、队列的类型、队列的操作以及队列的应用。同时,我们也会为您提供Python代码示例。 一、队列的定义 队列是一种…

    编程 2025-04-29
  • Python符号定义和使用方法

    本文将从多个方面介绍Python符号的定义和使用方法,涉及注释、变量、运算符、条件语句和循环等多个方面。 一、注释 1、单行注释 # 这是一条单行注释 2、多行注释 “”” 这是一…

    编程 2025-04-29

发表回复

登录后才能评论