c++运算符重载

不念不忘少年蓝@ 2022-07-15 01:58 361阅读 0赞

一、前言
重载运算符的目的是为了让c++代码变的更直观、易读,主要在类中定义,让我们的类对象有着和普通变量一样的操作,例如:“<<”输出运算符,我们也希望类对象可以使用它,直接输出一些有用信息,这个时候就可以使用运算符重载。

二、运算符重载的规则
(1):运算符重载,不可改变运算顺序和优先级。但是参数和返回类型都可以重新说明的,重载的形式:

  1. 返回类型 operator 运算符号(参数列表)

(2):运算符重载中,如果参数均为内部类型,不可重载,例如:

  1. int * operator + (int,int *);
  2. 既不可以:
  3. int a=5;
  4. int * pa=& a;
  5. pa=pa+a; //error

(3):c++还规定,“.”“::””.*““.->”“?:”这五个运算符不可以重载。

三、重载形式
(1):类的成员函数
(2):类的友元函数

注意:
当运算符重载为成员函数的时候,函数参数比原操作数少一个,友元函数时,参数个数和原操作数一个样。原因是因为成员函数可以直接访问该成员函数所在类的私有数据成员,少的那个参数就是该类自己。因为友元函数对某个对象的数据进行操作,就必须通过该对象的名称来进行,因此使用到的参数都要进行传递,操作数的个数就不会有变化。

四、重载为友元函数
前也说了,友元函数是没有this指针的,所以在双目运算符中需要两个参数,在单目运算符是只需要一个运算符即可。

  1. #include<iostream>
  2. using namespace std;
  3. class A
  4. {
  5. private:
  6. int a;
  7. public:
  8. A(int a)
  9. {
  10. this->a = a;
  11. }
  12. friend A operator +(A&, A&); //重载“+”
  13. friend A& operator ++(A&); //重载“++”
  14. friend ostream & operator << (ostream &,const A &);//重载“<<”
  15. };
  16. A operator + (A & a , A & a1)
  17. {
  18. int p = a.a + a1.a;
  19. A res(p);
  20. return res;
  21. }
  22. A & operator ++(A & a)
  23. {
  24. a.a++;
  25. return a;
  26. }
  27. ostream & operator <<(ostream & cout,const A & a)
  28. {
  29. cout << a.a << endl;
  30. return cout;
  31. }
  32. int main()
  33. {
  34. A a(10);
  35. cout << a << endl; //输出a中的a
  36. A a1(100);
  37. cout << a1 << endl; //输出a1中的a
  38. A and = a + a1; //加法
  39. cout << and << endl;
  40. a++; //自增
  41. cout << a << endl;
  42. system("pause");
  43. return 0;
  44. }

输出结果:
这里写图片描述

五、重载为成员函数

  1. #include<iostream>
  2. using namespace std;
  3. class A
  4. {
  5. private:
  6. int a;
  7. public:
  8. A(int a)
  9. {
  10. this->a = a;
  11. }
  12. A operator +(A & c) //重载“+”
  13. {
  14. int p = c.a + a;
  15. A r(p);
  16. return r;
  17. }
  18. A& operator ++() //重载“++”
  19. {
  20. a++;
  21. return * this;
  22. }
  23. void operator << (ostream &cout)//重载“<<”
  24. {
  25. cout << a << endl;
  26. }
  27. };
  28. int main()
  29. {
  30. A a(10);
  31. a << cout; //输出a中的a
  32. A a1(100);
  33. a1 << cout; //输出a1中的a
  34. A and = a + a1; //加法
  35. and << cout;
  36. a++; //自增
  37. a << cout; //这种输出形式已经改变了,相当于调用成员函数一样,所以声明为友元函数比较好。
  38. system("pause");
  39. return 0;
  40. }

输出结果:
这里写图片描述

注意:c++规定:“=”“()”“[]”“->”必须为成员函数重载。

六、运算符重载函数的格式
参考博客

发表评论

表情:
评论列表 (有 0 条评论,361人围观)

还没有评论,来说两句吧...

相关阅读

    相关 c++ 运算符重载

    1. 运算符重载介绍 之前的函数重载,允许多个同名不同参数类型的函数; 运算符重载允许程序员如何使用运算符(如+、-、==、=和!)来处理不同类型的数据类型; 对于基本数

    相关 c++运算符重载

    C++不允许把下标运算符函数作为外部函数来定义,它只能是非静态的成员函数。 注意操作符重载作为友元函数和成员函数的区别 // person.cpp : 定

    相关 c++运算符重载

    一、前言 重载运算符的目的是为了让c++代码变的更直观、易读,主要在类中定义,让我们的类对象有着和普通变量一样的操作,例如:“<<”输出运算符,我们也希望类对象可以使用它,

    相关 c++】运算符重载

    您可以重定义或重载大部分 C++ 内置的运算符。这样,您就能使用自定义类型的运算符。 重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运

    相关 c++运算符重载

    什么是运算符重载? 运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作。运算符函数的定义与其他函数的定义类似,惟一的区别是运算符函数的

    相关 C++】 运算符重载

    1、一元运算符 运算符重载是`C++`的一大特色,以函数重载的形式出现,函数名为关键字operator后跟着一个运算符,这些函数可以作为类的成员函数实现,也可以作为类的友