Funciones amigas en C++ y casos de uso con ejemplos

Publicado: 2022-10-22

La ocultación de datos es una técnica de desarrollo de software fundamental ampliamente utilizada en los lenguajes de programación orientados a objetos (OOP). Restringe el acceso a miembros de datos privados desde fuera de la clase. Sin embargo, una función de C++ conocida como función de amigo va en contra del principio de ocultación de datos.

En este artículo, aprenderá qué es la función de amigo en C++ , qué es una clase de amigo y explorará algunos casos de uso con ejemplos.

Consulte nuestros cursos de tecnología gratuitos para obtener una ventaja sobre la competencia.

Tabla de contenido

¿Qué es la función amigo en C++?

Una función amiga en C++ es una función declarada fuera de una clase pero tiene acceso a los miembros privados y protegidos de la clase. Aunque los miembros privados de una clase particular son inaccesibles para las funciones que no son miembros, declararlos como funciones amigas les da acceso a los miembros privados y protegidos de las clases.

Consulte la Certificación avanzada de upGrad en DevOps

Características de la Función Amigo

La función amigo en C++ tiene las siguientes características:

  • La función amigo está fuera del alcance de la clase a la que se ha declarado amigo.
  • Una función amiga puede ser miembro de una clase o una función declarada fuera del alcance de la clase.
  • La funcionalidad de amigo no se limita a una sola clase.

Explore nuestros cursos populares de ingeniería de software

Maestría en Ciencias en Ciencias de la Computación de LJMU & IIITB Programa de Certificado de Ciberseguridad Caltech CTME
Bootcamp de desarrollo de pila completa Programa PG en Blockchain
Programa Ejecutivo PG en Desarrollo Full Stack
Ver todos nuestros cursos a continuación
Cursos de ingeniería de software

  • Invocar una función amiga es como invocar cualquier función normal de la clase sin usar el objeto
  • No podemos invocar la función amigo usando el objeto ya que no está en el alcance de la clase
  • Las funciones amigas en C++ tienen objetos como argumentos
  • Podemos declarar una función de amigo ya sea en la parte privada o pública
  • Los nombres de los miembros no son directamente accesibles para una función amiga, y tiene que usar el operador de membresía de punto y el nombre del objeto con el nombre del miembro.

Consulta la Certificación Avanzada en Seguridad Cibernética de upGrad

Sintaxis de la función de amigo

Para declarar la función amigo, usamos la palabra clave amigo dentro del cuerpo de la clase. La sintaxis de la función amigo es:

clase nombreclase {

… .. …

amigo returnType functionName (lista de argumentos);

… .. …

}

Habilidades de desarrollo de software bajo demanda

Cursos de JavaScript Cursos básicos de Java Cursos de Estructuras de datos
Cursos de Node.js Cursos SQL Cursos de desarrollo de pila completa
Cursos NFT Cursos DevOps Cursos de Big Data
Cursos de React.js Cursos de Seguridad Cibernética Cursos de computación en la nube
Cursos de diseño de base de datos Cursos de Python Cursos de Criptomonedas

Si desglosamos la sintaxis, esto es lo que significa cada término:

  • amigo es la palabra clave que indica que la función es una función amiga
  • returnType es el tipo de retorno de la función
  • functionName es el nombre de la función que se hizo amigo de la clase
  • lista de argumentos son los argumentos que pasaremos

Aprenda cursos de desarrollo de software en línea de las mejores universidades del mundo. Obtenga Programas PG Ejecutivos, Programas de Certificado Avanzado o Programas de Maestría para acelerar su carrera.

Ejemplo de una función amiga de C++

Ahora, veamos algunos programas para ilustrar la función amigo.

Ejemplo 1: función amiga de C++ para imprimir la altura de una caja

#incluir <iostream>

utilizando el espacio de nombres estándar;

caja de clase

{

privado:

altura int;

público:

Caja (): altura (0) { }

amigo int printHeight(Box); // funcion amigo

};

int printHeight(Cuadro h)

{

h.altura += 40;

volver h.altura;

}

int principal()

{

caja h;

cout<<“Altura de la caja: “<< printHeight(h)<<endl;

devolver 0;

}

Lea nuestros artículos populares relacionados con el desarrollo de software

¿Cómo implementar la abstracción de datos en Java? ¿Qué es la clase interna en Java? Identificadores de Java: definición, sintaxis y ejemplos
Comprender la encapsulación en OOPS con ejemplos Argumentos de línea de comando en C explicados Las 10 funciones y características principales de la computación en la nube en 2022
Polimorfismo en Java: conceptos, tipos, características y ejemplos ¿Paquetes en Java y cómo usarlos? Tutorial de Git para principiantes: Aprende Git desde cero

Producción:

Altura de la caja: 40

Ejemplo 2: cuando la función de amigo de C++ es compatible con dos clases

#incluir <iostream>

utilizando el espacio de nombres estándar;

// declaración de avance

clase ClaseQ;

clase ClaseP {

público:

// constructor para inicializar numP a 12

ClaseP() : numP(12) {}

privado:

int numP;

// declaración de la función amiga

amigo int agregar (ClassP, ClassQ);

};

clase Clase Q {

público:

// constructor para inicializar numQ a 1

ClaseQ() : numQ(1) {}

privado:

int numQ;

// declaración de la función amiga

amigo int agregar (ClassP, ClassQ);

};

// acceder a miembros de ambas clases

int add(ClassP objectP, ClassQ objectQ) {

return (objetoP.numP + objetoQ.numQ);

}

int principal() {

ClaseP objetoP;

ClassQ objeto Q;

cout << “Suma: ” << add(objetoP, objetoQ);

devolver 0;

}

Producción:

Suma: 13

En el ejemplo anterior, Class P y Class Q han declarado add() como una función amiga, dándole acceso a los datos privados de ambas clases. Además, la función de amigo dentro de la Clase P está usando la Clase Q.

Entonces, hacemos una declaración directa de Clase Q en el programa.

Implementando una función de amigo

Para tener una mejor idea de la función amigo en C++, ahora veremos las dos formas en que podemos implementar la función amigo.

  1. Implementando una función amiga en C++ a través de un método de otra clase

Declaramos una clase amiga en C++ cuando necesitamos acceder a los miembros privados y protegidos de otra clase en la que ha sido declarada amiga. También es posible declarar una función de un solo miembro de otra clase como amiga.

clase nombre_clase

{

clase amiga clase_amiga;// declarando clase amiga

};

clase amigo_clase

{

};

En la declaración anterior de clase amiga, todas las funciones en clase_amiga son las funciones amigas de nombre_clase .

Aquí hay un ejemplo simple para ilustrar la implementación de funciones amigas a través de un método de otra clase:

#incluir <iostream>

utilizando el espacio de nombres estándar;

clase A

{

intp=4;

amigo clase B; // clase amigo

};

clase B

{

público:

visualización nula (A &a)

{

cout<<”El valor de p es:” <<ap;

}

};

int principal ()

{

un un;

sib;

  1. pantalla (a);

devolver 0;

}

Producción:

El valor de p es: 4

  1. Implementando una función global

La implementación de una función de amigo global nos permite acceder a todos los miembros protegidos y privados de la declaración de clase global. Aquí hay un ejemplo:

#incluir<iostream>

utilizando el espacio de nombres estándar;

espacio de clase

{

en un;

intb;

intc;

público:

void setdata (int x, int y, int z);

visualización vacía (vacío);

amigo operador nulo- (espacio &s);

};

espacio vacío ::setdata (int x, int y, int z)

{

a=x; b=y; c=z;

}

espacio vacío::display(vacío)

{

cout<<a<<” “<<b<<” “<<c<<“\n”;

}

operador nulo- (espacio &s)

{

sa =-sa;

sb =- sb;

sc =- sc;

}

int principal ()

{

espacio s;

  1. establecer datos (9,2,3);

cout<<“s:”;

  1. monitor ();

-s;

cout<<“-s:”;

  1. monitor ();

devolver 0;

}

Producción:

s: 9 2 3

-s: -9 -2 -3

En el programa de ejemplo anterior, operator- es la función amiga que declaramos globalmente en el ámbito de la clase.

¿Qué es la clase amiga en C++?

Aunque ya es bastante evidente, una clase amiga es una clase que tiene acceso tanto a los miembros privados como a los protegidos de la clase en la que se declara amiga.

En términos simples, una clase amiga en C++ se usa cuando queremos que una clase tenga acceso a los miembros privados y protegidos de otra clase.

Las funciones miembro de la clase que declaramos como amigas de otra clase son funciones amigas de la clase amiga. Por lo tanto, las funciones amigas vinculan ambas clases.

Sintaxis de la clase Friend

Aquí está la sintaxis de una clase amiga en C++:

clase R; // declaración de avance

clase P{

// Otras Declaraciones

amigo clase R;

};

clase R{

// Declaraciones

};

En la ilustración anterior, la Clase R es amiga de la Clase P. Como resultado, la Clase R puede acceder a los miembros de datos privados de la Clase P. Sin embargo, lo contrario no es cierto y la Clase P no puede acceder a los miembros de datos privados de la Clase R. .

Además, la declaración directa se proporciona para informar al compilador de la existencia de una entidad antes de que se defina categóricamente. Aquí, declaramos la Clase R usando una declaración directa para notificar al compilador de su existencia. La declaración directa nos permite usar los objetos de la Clase R en la Clase P.

¿Cuál es el uso de la función amigo en C++?

Resumiendo nuestra discusión, veamos los dos usos principales de la función amigo en C++:

  • Primero, usamos la función de amigo cuando queremos acceder a los miembros privados y protegidos de una clase. Para hacer esto, generalmente requeriríamos que los objetos de esa clase accedan a los miembros privados y protegidos. Sin embargo, la función de amigo elimina la situación en la que la función debe ser miembro de la clase para obtener acceso.
  • Otro uso de la función amigo en C++ es la sobrecarga de operadores. Las funciones que tienen el mismo nombre pero diferentes números y argumentos se conocen como funciones de sobrecarga. Las funciones amigas en C++ encuentran uso en la sobrecarga de operadores.

En este caso, la función de sobrecarga del operador precede a la palabra clave amigo y declara un ámbito de clase de función. Cuando están sobrecargados por la función amigo, los operadores binarios toman dos argumentos explícitos mientras que los operadores unarios toman un argumento. Funciona de la misma manera que una función de operador binario, excepto que la implementación de la función de operador amigo tiene lugar fuera del alcance de la clase.

Eso nos lleva al final de nuestra discusión sobre la función amigo en C++ y sus usos. Espero que esto te ayude a mejorar tu conocimiento de C++.

Además, si está buscando iniciar su carrera como desarrollador de pila completa, upGrad ofrece un programa ejecutivo de posgrado en desarrollo de software completamente en línea: especialización en desarrollo de pila completa de 13 meses en colaboración con IIIT Bangalore.

Puntos destacados del programa:

  • Exposición práctica a estudios de casos y asignaciones relevantes de la industria
  • Más de 450 horas de aprendizaje de 360 ​​grados
  • 10+ mejores herramientas y lenguajes de programación
  • Tutoría profesional 1:1 Sesiones con mentores de la industria
  • Apoyo estudiantil 24/7

¡ Regístrese hoy para obtener los beneficios exclusivos de upGrad hoy!

¿Qué es la función amigo en C++?

Una función amiga en C++ es una función que no es miembro de una clase pero tiene acceso a sus miembros privados y protegidos.

¿Cómo se declara una función de amigo?

Una función de amigo tiene acceso a los datos privados y protegidos de una clase. Para declarar una función amiga, usamos la palabra clave amigo dentro del cuerpo de la clase.

¿Cómo se hace un amigo de clase en C++?

Usamos la palabra clave amigo para declarar una clase como clase amiga en C++. La palabra clave permite que cualquier clase acceda a miembros privados y protegidos de otras clases y funciones.