Latest web development tutorials

C ++ sobrecarga de funciones y la sobrecarga de operadores

C ++ permite que una de lasfunciones y los operadoresen el mismo ámbito de especificar más de una definición, se llamasobrecarga de funcionesyla sobrecarga de operadores.

comunicado con sobrecarga es uno que ha sido declarada en este ámbito antes de una función o método declaraciones tienen el mismo nombre, pero su lista de parámetros y definiciones (realización) no son los mismos.

Cuando se llama a unafunción sobrecargada o un operador sobrecargado,el compilador a través del tipo de parámetro que está utilizando, el tipo y la definición de parámetros se comparan para determinar la elección de la definición más apropiada. Seleccione la función sobrecargada más adecuado o proceso de la sobrecarga de operadores, llamadaresolución de sobrecarga.

En C ++ sobrecarga de funciones

En el mismo ámbito, se puede declarar varias funciones función similar con el mismo nombre, pero estos parámetros formales (el número se refiere al tipo de parámetro o secuencialmente) función con el mismo nombre debe ser distinto. Usted puede no sólo volviendo a los diferentes tipos de funciones sobrecargadas.

Los siguientes ejemplos, el mismo nombre que la funciónprint () se utiliza para salida diferentes tipos de datos:

#include <iostream>
using namespace std;
 
class printData 
{
   public:
      void print(int i) {
        cout << "Printing int: " << i << endl;
      }

      void print(double  f) {
        cout << "Printing float: " << f << endl;
      }

      void print(char* c) {
        cout << "Printing character: " << c << endl;
      }
};

int main(void)
{
   printData pd;
 
   // Call print to print integer
   pd.print(5);
   // Call print to print float
   pd.print(500.263);
   // Call print to print character
   pd.print("Hello C++");
 
   return 0;
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

Printing int: 5
Printing float: 500.263
Printing character: Hello C++

En C ++ sobrecarga de operadores

Usted puede volver a definir o redefinir la mayoría de los operadores integrados en C ++. Por lo tanto, se puede usar un tipo personalizado del operador.

El operador está sobrecargado con una función especial, el nombre de la función es seguido por el operador principal y el operador para anular los símbolos. Y otras funciones, operadores sobrecargados tienen un tipo de retorno y la lista de parámetros.

Box operator+(const Box&);

Se añaden declaración del operador de suma de dos objetos de la caja, el regreso definitivo de los objetos de la caja. La mayoría de los operadores sobrecargados pueden ser definidas como funciones normales o no miembros se definen como funciones miembro de clase. Si definimos la función anterior como clases de función que no es miembro, entonces tenemos que pasar dos parámetros para cada operación, de la siguiente manera:

Box operator+(const Box&, const Box&);

El siguiente ejemplo demuestra el concepto de sobrecarga de operadores función miembro. En este caso, el objeto pasa como un parámetro, las propiedades del objeto utilizandoeste operador puede acceder de la siguiente manera:

#include <iostream>
using namespace std;

class Box
{
   public:

      double getVolume(void)
      {
         return length * breadth * height;
      }
      void setLength( double len )
      {
          length = len;
      }

      void setBreadth( double bre )
      {
          breadth = bre;
      }

      void setHeight( double hei )
      {
          height = hei;
      }
      // 重载 + 运算符,用于把两个 Box 对象相加
      Box operator+(const Box& b)
      {
         Box box;
         box.length = this->length + b.length;
         box.breadth = this->breadth + b.breadth;
         box.height = this->height + b.height;
         return box;
      }
   private:
      double length;      // 长度
      double breadth;     // 宽度
      double height;      // 高度
};
// 程序的主函数
int main( )
{
   Box Box1;                // 声明 Box1,类型为 Box
   Box Box2;                // 声明 Box2,类型为 Box
   Box Box3;                // 声明 Box3,类型为 Box
   double volume = 0.0;     // 把体积存储在该变量中
 
   // Box1 详述
   Box1.setLength(6.0); 
   Box1.setBreadth(7.0); 
   Box1.setHeight(5.0);
 
   // Box2 详述
   Box2.setLength(12.0); 
   Box2.setBreadth(13.0); 
   Box2.setHeight(10.0);
 
   // Box1 的体积
   volume = Box1.getVolume();
   cout << "Volume of Box1 : " << volume <<endl;
 
   // Box2 的体积
   volume = Box2.getVolume();
   cout << "Volume of Box2 : " << volume <<endl;

   // 把两个对象相加,得到 Box3
   Box3 = Box1 + Box2;

   // Box3 的体积
   volume = Box3.getVolume();
   cout << "Volume of Box3 : " << volume <<endl;

   return 0;
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

Volume of Box1 : 210
Volume of Box2 : 1560
Volume of Box3 : 5400

operadores sobrecargados pueden / no se pueden sobrecargar los operadores

La siguiente es una lista de los operadores se puede sobrecargar:

+-*/%^
&|~!,=
<><=>=++--
<<>>==!=&&||
+=-=/=%=^=&=
|=*=<<=>>=[]()
->->*newnew []deletedelete []

La siguiente es una lista de los operadores no puede ser sobrecargado:

::.*.?:

Los ejemplos de la sobrecarga de operadores

A continuación se ofrece una variedad de ejemplos sobrecarga de operadores para ayudarle a entender mejor el concepto de sobrecarga.

序号运算符和实例
1 一元运算符重载
2 二元运算符重载
3 关系运算符重载
4 输入/输出运算符重载
5 ++ 和 -- 运算符重载
6 赋值运算符重载
7 函数调用运算符 () 重载
8 下标运算符 [] 重载
9 类成员访问运算符 -> 重载