Constructor predeterminado y palabra clave predeterminada en C++

Suraj P 12 octubre 2023
Constructor predeterminado y palabra clave predeterminada en C++

Este artículo habla sobre los constructores predeterminados en C++ y la palabra clave recién introducida default.

Primero, aprendamos sobre el constructor predeterminado en C++. El constructor predeterminado es un tipo especial de constructor que no tiene argumentos y se usa para establecer valores predeterminados para los miembros de datos de una clase.

Ejemplo:

class demo {
  int age;
  int id;

 public:
  demo() {
    age = 10;
    id = 1;
  }
};

Palabra clave predeterminada y función predeterminada en C++

La versión C++ 11 introdujo una nueva forma de declaración de funciones para declarar explícitamente las funciones predeterminadas con la ayuda del especificador =default. Podemos declarar explícitamente una función predeterminada agregando esto al final de la declaración de la función.

Hacer que una función sea explícitamente predeterminada tiene ventajas, ya que obliga al compilador a generar la implementación predeterminada. Y en términos de eficiencia, son mejores que las funciones implementadas manualmente.

Por ejemplo, al crear un constructor parametrizado en una clase, el compilador no crea ni agrega un constructor predeterminado en el programa. Podemos usar el = predeterminado para crear un constructor predeterminado en esos casos.

Código de ejemplo:

#include <bits/stdc++.h>
using namespace std;

class demo {
 public:
  int x;

  demo(int temp)  // parameterized constructor
  {
    x = temp;
  }

  demo() = default;
};

int main() {
  demo d;  // uses default constructor

  demo d2(200);  // uses parameterized constructor
}

Podemos ver que después del constructor parametrizado, hemos usado el especificador =default para obligar al compilador a crear una versión predeterminada del constructor. Y podemos observar que cuando usamos =default, no tenemos que especificar el cuerpo de nuestro constructor.

Otra razón para usar =default en lugar de usar {} (cuerpo vacío) de la función es que mejora la legibilidad del código.

Cuando se trata del especificador =default, una regla es que la función no debe tener un argumento predeterminado. Solo las funciones de miembros especiales, como el constructor predeterminado, el constructor de copia o el destructor, pueden establecerse por defecto.

Código de ejemplo:

#include <bits/stdc++.h>
using namespace std;

class demo {
 public:
  int add() = default;

  demo(float, float) = default;

  demo(int = 0) = default;
};

int main() {
  demo d2(200, 300);  // uses parameterized constructor
}

Producción :

[Error] 'int demo::add()' cannot be defaulted
[Error] 'demo::demo(float, float)' cannot be defaulted
[Error] 'demo::demo(int)' cannot be defaulted

El motivo anterior no funciona porque la primera función y la segunda función add() y demo(float,float) no son una función miembro especial, y la tercera función demo(int = 0) tiene algunos argumento predeterminado. Por lo que estas funciones no pueden ser predeterminadas usando =default; por lo tanto, obtenemos el error de compilación.

Autor: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

Artículo relacionado - C++ Constructor