21xrx.com
2024-12-22 23:28:14 Sunday
登录
文章检索 我的文章 写文章
C++中的运算符重载与友元函数
2023-06-25 01:52:44 深夜i     --     --
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”对象的属性输出到控制台。

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

  
  

评论区

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