21xrx.com
2025-04-03 23:01:35 Thursday
文章检索 我的文章 写文章
C++中的运算符重载与友元函数
2023-06-25 01:52:44 深夜i     9     0
C++ 运算符重载 友元函数

在C++中,运算符重载是一种非常有用的特性,允许我们重载预定义运算符,以便用于自定义类型。通过运算符重载,可以将自定义类型与C++语言提供的标准类型一起使用,并使代码更加简洁和易于阅读。

运算符重载的形式就像重载函数一样,它们以关键字“operator”开始,后面跟着要重载的运算符。例如,运算符“+”可以重载为添加两个自定义类型的对象。

下面是一个简单的示例:

class Complex {
public:
  Complex(double r = 0, double i = 0) : real_(r), imag_(i) {}
  Complex operator+(const Complex& rhs) {
    return Complex(real_ + rhs.real_, imag_ + rhs.imag_);
  }
private:
  double real_;
  double imag_;
};
int main() {
  Complex c1(1, 2);
  Complex c2(3, 4);
  Complex c3 = c1 + c2;
  return 0;
}

在这个例子中,我们定义了一个名为“Complex”的类,它具有一个成员函数“operator +”,允许我们使用运算符“+”来添加两个“Complex”对象。通过这种方式,我们可以轻松地执行常见的操作,例如计算两个复数的和。

除了成员函数外,我们还可以使用友元函数来重载运算符。友元函数是一个不属于类的函数,但可以访问类的私有成员。因此,使用友元函数可以使我们更灵活地对运算符进行重载。

下面是一个使用友元函数重载运算符“<< ”的示例:

class Person {
  friend std::ostream& operator<<(std::ostream& os, const Person& p) {
    os << "Name: " << p.name_ << "\nAge: " << p.age_;
    return os;
  }
public:
  Person(std::string name, int age) : name_(name), age_(age) {}
private:
  std::string name_;
  int age_;
};
int main() {
  Person p("John Doe", 30);
  std::cout << p << std::endl;
  return 0;
}

在这个例子中,我们定义了一个名为“Person”的类,并使用友元函数“operator <<”将其重载。操作符“<<”用于输出数据,而我们的友元函数使用std::ostream对象将“Person”对象的属性输出到控制台。

总之,运算符重载是一种强大的编程技术,可使代码更加清晰简洁并允许使用自定义类型的对象。它可以作为成员函数或友元函数进行实现,使我们的代码更加灵活和易于管理。

  
  

评论区