21xrx.com
2024-11-08 20:23:50 Friday
登录
文章检索 我的文章 写文章
C++结构体运算符重载之友元函数
2023-07-10 20:35:49 深夜i     --     --
C++ 结构体 运算符重载 友元函数

C++ 是一种面向对象编程语言,其特点之一是允许用户定义自己的数据类型。结构体是 C++ 中一种非常常见的数据类型,它可以组合不同类型的数据成员,方便地表示真实世界中的实体。

C++ 还允许用户重载运算符,使得结构体可以像内置数据类型一样进行运算。其中,友元函数是一种特殊的函数,它可以访问其所属类的私有成员,常被用于运算符重载。

结构体运算符重载之友元函数的示例代码如下:


#include <iostream>

using namespace std;

struct MyStruct {

  int a;

  int b;

  // 友元函数

  friend MyStruct operator+(const MyStruct& left, const MyStruct& right);

};

// 友元函数的实现

MyStruct operator+(const MyStruct& left, const MyStruct& right) {

  MyStruct result;

  result.a = left.a + right.a;

  result.b = left.b + right.b;

  return result;

}

int main() {

  MyStruct s1 1, s2 4;

  MyStruct s3 = s1 + s2; // 使用重载运算符

  cout << "s3.a = " << s3.a << endl;

  cout << "s3.b = " << s3.b << endl;

  return 0;

}

在上述示例代码中,我们定义了一个名为 `MyStruct` 的结构体,其中包含了两个整型数据成员 `a` 和 `b`。接着,我们定义了一个名为 `operator+` 的友元函数,用于实现两个 `MyStruct` 类型的对象相加的功能。

注意,我们需要使用 `friend` 关键字声明 `operator+` 为 `MyStruct` 的友元函数,这样才能访问 `MyStruct` 的私有成员。此外,由于 `operator+` 是一个全局函数,因此需要在函数声明和函数实现中分别指定其参数类型为 `const MyStruct&`,表示左值和右值引用。

在主函数中,我们定义了两个 `MyStruct` 类型的对象 `s1` 和 `s2`,然后使用 `s1 + s2` 的方式调用 `operator+`,得到了一个新的 `MyStruct` 对象 `s3`,并分别输出了它的两个数据成员。

结构体运算符重载之友元函数的优点在于它可以访问私有成员,同时也更加灵活,可以在全局函数中重载运算符。当然,在实际开发中,我们还需要考虑可读性、可维护性等因素,避免滥用运算符重载。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复