C ++运算符重载

时间:2020-02-23 14:29:53  来源:igfitidea点击:

在本文中,我们将了解C ++提供的非常有趣但不可思议的功能-运算符重载。

运算符重载入门

运算符重载为数学运算符提供了执行除原始运算以外的其他运算操作的能力。

例如," +"运算符用于算术加法,但借助运算符重载,我们可以使用" +"运算符在运行时有效地连接两个字符串。

因此,C ++能够使运算符工作于不同的维度,以执行除自身指定的运算符以外的各种运算符。

语法:

Class_name operator_keyword operator_symbol(Class_name object)

我们将在本文中进一步了解语法和用法。

例:

#include<iostream>  
#include<conio.h>
#include<string.h>
using namespace std;  

class Concatenate  
{  
  char inp_str[100];  
public:  
  void enter_string() 
  {  
      cout<<"Input the string: ";  
      cin>>inp_str;  
  }  
  void show_string()  
  {  
      cout<<inp_str;  
  }  
  Concatenate operator+(Concatenate St)  
  {  
      Concatenate ob;  
      strcat(inp_str,St.inp_str);  
      strcpy(ob.inp_str,inp_str);  
      return ob;  
  }  
};  
int main()  
{  
 Concatenate st1,st2,res;   
  st1.enter_string();  
  st2.enter_string();  
  res=st1+st2;
  cout<<"The concatenated string is:\n";
  res.show_string();   
  return 0;  
}   

在上面的示例中,我们重载了" +"运算符以执行字符串连接。
我们已经创建了一个类型为Class的对象,并进一步使用了strcpy()函数复制输入字符串,并使用strcat()函数将其与类对象相关联。

输出:

Input the string: Journal
Input the string: Dev
The concatenated string is:
theitroad

运算符重载规则

  • 运算符重载只能使预定义的运算符重载。
    不能创建或者重载新的运算符。

  • 运算符的基本要求不能改变。
    例如,对于" +"运算符,我们有必要向函数提供两个变量。
    因此,这需要保持。

  • 重载的运算符没有默认参数。

  • 运算符的关联性和优先级无法更改。

  • 执行运算符重载时,必须至少有一个用户定义类型的操作数。

  • 我们不能重载以下运算符:"。
    "(点)运算符,范围解析运算符(::),三元运算符(?:)和sizeof运算符。

C ++中的运算符重载类型

运营商重载大致分为两种:

  • 一元运算符重载:仅适用于一个操作数。

  • "二进制运算符重载":它适用于两个操作数。

1.一元运算符重载

一元运算符在单个操作数上重载运算符,并分别处理一个类对象。
因此,我们无需将任何参数传递给一元重载函数。

注意:如果使用朋友函数,则一元运算符可以有一个参数。
除此之外,如果一元运算符函数表示类/非静态函数,则我们不将零参数传递给该函数。

语法:一元函数定义

return_type operator_keyword operator_symbol()
{
  //body
}

语法:调用一元运算符重载函数

Class_name object;
operator_symbol object;

例:

#include<iostream>  
#include<conio.h>
#include<string.h>
using namespace std;  

class Overload 
{  
  int a,b;  
public:  
  void enter_string() 
  {  
      cout<<"Input 1: ";  
      cin>>a;  
      cout<<"Input 2: ";  
      cin>>b;  
  }  
 
  void operator+()  
  {  
      a++;
      b++;
      cout<<"Incremented values:\n";
      cout<<a<<'\t'<<b;
  }  
};  
int main()  
{  
 Overload obj;
 obj.enter_string();
 +obj;
  return 0;  
}   

在上面的示例中,我们重载了" +"运算符,以增加传递给一元函数的值。

输出:

Input 1: 100
Input 2: 200
Incremented values:
101	201

2.二进制运算符重载

二进制运算符重载函数适用于两个操作数,因此我们需要将一个参数传递给二进制重载函数。

注意:如果是朋友功能,我们需要将两个参数传递给该功能。

语法:二进制运算符重载函数

return_type operator_keyword operator_symbol(Class_name argument1)
{
  //body
}

因此,对于所有人来说,现在很清楚,本教程开始的示例是二进制重载类型。

语法:调用一元运算符重载函数

Class_name obj1, obj2, obj3;
obj3 = obj1 operator_symbol obj2;

例:

#include<iostream>  
#include<conio.h>
#include<string.h>
using namespace std;  

class Overload  
{  
 
public:  
 int num1, num2; 
  void enter_num() 
  {  
      cout<<"Input 1: ";  
      cin>>num1;  
      cout<<"Input 2: ";  
      cin>>num2; 
  }  
   
  Overload operator+(Overload St)  
  {  
      Overload ob;  
      ob.num1 = this->num1 + St.num1;
      ob.num2 = this->num2 + St.num2;
      return ob;  
  }  
};  
int main()  
{  
 Overload A, B, res;  
 cout<<"Enter the input values for object A:\n";
 A.enter_num();
 cout<<"Enter the input values for object B:\n";
 B.enter_num();  
  res=A+B;
  cout<<"Result:\n";
  cout<<res.num1<<'\t'<<res.num2; 
  return 0;  
}   

在上面的示例中,我们重载了" +"运算符以添加两个类对象。

输出:

Enter the input values for object A:
Input 1: 10
Input 2: 10
Enter the input values for object B:
Input 1: 20
Input 2: 30
Result:
30	40

运算符超载一目了然!

  • 因此,运算符重载重新定义了运算符的常规或者基本功能。

  • 它保留了运算符的原始功能,并且仅使用用户定义的类型。

  • 运算符重载函数也可以用作类或者朋友函数。