欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > 关于友元和运算符重载

关于友元和运算符重载

2025/3/28 8:45:40 来源:https://blog.csdn.net/2301_79644936/article/details/146401603  浏览:    关键词:关于友元和运算符重载
#include <iostream>
using namespace std;class Complex {
public:Complex(int = 0, int = 0); // 构造函数,默认参数为 0friend ostream & operator <<(ostream &, const Complex &); // 输出运算符重载friend Complex operator +(const Complex &, const Complex &); // 加法运算符重载
private:int real, img; // 复数的实部和虚部
};// 构造函数实现
Complex::Complex(int a, int b) {real = a;img = b;
}// 输出运算符重载实现
ostream & operator <<(ostream &tt, const Complex &rr) {tt << rr.real << "+" << rr.img << "i"; // 格式化为 a+bireturn tt;
}// 加法运算符重载实现
Complex operator +(const Complex &tt, const Complex &rr) {int r = tt.real + rr.real; // 实部相加int i = tt.img + rr.img;   // 虚部相加return Complex(r, i);      // 返回新的复数对象
}int main() {Complex a(1, 2), b(3, 4), c; // 创建复数对象 a, b, cc = a + b;                   // 计算 a + bcout << c << "          hello"; // 输出 c 和字符串return 0;
}

代码解析

Complex 定义
  1. 成员变量

    • int real:复数的实部。
    • int img:复数的虚部。
  2. 构造函数

    Complex(int a = 0, int b = 0) { real = a; img = b; }
    
    • 默认参数为 0,用于初始化复数的实部和虚部。
  3. 友元函数

    • 输出运算符重载
      friend ostream & operator <<(ostream &, const Complex &);
      
      • 用于将复数对象输出到流中。
    • 加法运算符重载
      friend Complex operator +(const Complex &, const Complex &);
      
      • 用于实现两个复数对象的加法运算。

函数实现
  1. 构造函数实现

    Complex::Complex(int a, int b) { real = a; img = b; }
    
  2. 输出运算符重载实现

    ostream & operator <<(ostream &tt, const Complex &rr) {tt << rr.real << "+" << rr.img << "i";return tt;
    }
    
    • 将复数对象格式化为 a+bi 的形式输出到流中。
  3. 加法运算符重载实现

    Complex operator +(const Complex &tt, const Complex &rr) {int r = tt.real + rr.real;int i = tt.img + rr.img;return Complex(r, i);
    }
    
    • 将两个复数的实部和虚部分别相加,返回一个新的复数对象。

main 函数
int main() {Complex a(1, 2), b(3, 4), c;  // 创建复数对象 a, b, cc = a + b;                    // 调用加法运算符重载,计算 a + bcout << c << "          hello"; // 调用输出运算符重载,输出 c 和字符串return 0;
}

运行结果分析

  1. 创建对象

    • Complex a(1, 2)a 的实部为 1,虚部为 2
    • Complex b(3, 4)b 的实部为 3,虚部为 4
    • Complex cc 的实部和虚部默认初始化为 0
  2. 加法运算

    • c = a + b
      • 实部:1 + 3 = 4
      • 虚部:2 + 4 = 6
      • c 的值为 4+6i
  3. 输出结果

    • cout << c << " hello"
      • 输出 c 的值 4+6i,后跟字符串 " hello"

完整输出

4+6i          hello

关键点总结

  1. 运算符重载

    • 通过友元函数重载 <<+ 运算符,使得复数对象可以直接使用 << 输出和 + 相加。
  2. 友元函数

    • 友元函数可以访问类的私有成员,适用于需要外部函数操作类内部数据的场景。
  3. 默认参数

    • 构造函数的默认参数 0 使得对象可以默认初始化。
  4. 链式调用

    • 输出运算符重载返回 ostream&,支持链式调用,如 cout << c << "hello"

总结

  • 代码通过运算符重载实现了复数对象的加法和输出功能,展示了 C++ 中运算符重载和友元函数的用法。
  • 理解这些特性有助于编写更简洁、易读的代码,尤其是在处理自定义数据类型时。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词