Operadores en C++

Jinku Hu 12 octubre 2023
  1. Operadores comunes proporcionados en lenguaje C++
  2. Operaciones sobrecargadas en C++
Operadores en C++

Este artículo mostrará varios métodos sobre cómo utilizar operadores en C++.

Operadores comunes proporcionados en lenguaje C++

Los operadores son la parte esencial de las expresiones en la programación C++. Proporcionan diferentes operaciones realizadas en operandos suministrados, y el programador suele utilizar los resultados evaluados según sea necesario. Podemos dividir libremente los operandos en dos tipos: operadores comunes y especiales. Los operadores comunes son operaciones implementadas casi universalmente en la mayoría de los lenguajes de programación, y estos incluyen operadores aritméticos, lógicos, de comparación, de asignación, de acceso a miembros y varios otros.

De manera similar a las reglas del álgebra, existen características de precedencia y asociatividad cuando múltiples operadores forman la expresión. Resumiremos algunas de estas reglas en este artículo, pero la descripción completa debe referirse a la documentación del idioma y al operador tabla de precedencia. Tenga en cuenta que las reglas de precedencia y asociatividad para operaciones aritméticas básicas son similares a las reglas matemáticas comunes. Por lo tanto, las expresiones del siguiente ejemplo generan los números enteros 20 y 10 en lugar de 60 y 30.

#include <iostream>

using std::cout;
using std::endl;

int main() {
  cout << 10 + 2 * 5 << endl;
  cout << 40 - 20 - 10 << endl;

  return EXIT_SUCCESS;
}

Producción :

20
10

El programador puede usar paréntesis para anular las reglas generales de precedencia y asociatividad, de manera similar a como se hace en álgebra. Cada expresión compuesta entre paréntesis se tratará como una unidad que se evaluará por separado. Uno de los errores comunes al usar la aritmética de punteros es perder los paréntesis.

Si accedemos al elemento en el array usando la aritmética del puntero más la operación de desreferencia, necesitamos poner la aritmética entre paréntesis. De lo contrario, el valor señalado por el puntero dado sería incrementado por el operando numérico y no por el puntero en sí mismo porque el operador de desreferencia tiene mayor precedencia que la suma.

#include <iostream>

using std::cout;
using std::endl;

int main() {
  int vec[] = {10, 22, 63, 14};
  cout << *vec + 2 << endl;
  cout << *(vec + 2) << endl;

  return EXIT_SUCCESS;
}

Producción :

12
63

Operaciones sobrecargadas en C++

Una de las características más poderosas que se pueden encontrar en el lenguaje C++ es que permite al programador definir cómo deben comportarse los operadores cuando se les llama en objetos definidos por el usuario, como clases. Dado que esta función ofrece operaciones alternativas al operador dado, se denomina operadores sobrecargados. Sin embargo, tenga en cuenta que el número de operandos y la precedencia no se pueden modificar implementando un operador sobrecargado.

El siguiente fragmento de código declara una clase Person que contiene dos miembros de datos de cadena y sobrecarga el operador + para este tipo. Los operadores sobrecargados se implementan de manera similar a otras funciones de clase con nombres especiales, comenzando con la palabra clave operador seguida del símbolo del operador en sí. Estas funciones pueden tener un tipo de retorno y una lista de parámetros. Tenga en cuenta que una de las restricciones de la sobrecarga de operadores es que el programador no puede crear nuevos operadores como $> o !!.

#include <iostream>
#include <string>
#include <utility>
#include <vector>

using std::cout;
using std::endl;
using std::string;
using std::vector;

class Person {
 public:
  Person(string s1, string s2) : name(std::move(s1)), surname(std::move(s2)) {}

  Person operator+(const Person &p) {
    Person ret(name + p.name, surname + p.surname);
    return ret;
  }

  void printPerson() { cout << name << " " << surname << endl; }

 private:
  string name;
  string surname;
};

int main() {
  Person P1("Buddy", "Rich");
  Person P2("Lady", "Bee");
  P1 = P1 + P2;

  P1.printPerson();

  exit(EXIT_SUCCESS);
}

Producción :

BuddyLady RichBee
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - C++ Operator