Funções de amigo em C++ e caso de uso com exemplos

Publicados: 2022-10-22

A ocultação de dados é uma técnica fundamental de desenvolvimento de software amplamente utilizada em linguagens de programação orientadas a objetos (OOPs). Ele restringe o acesso a membros de dados privados de fora da classe. No entanto, um recurso C++ conhecido como função amigo vai contra o princípio de ocultação de dados.

Neste artigo, você aprenderá o que é função de amigo em C++ , o que é uma classe de amigo e explorará alguns casos de uso com exemplos.

Confira nossos cursos de tecnologia gratuitos para obter uma vantagem sobre a concorrência.

Índice

Qual é a função amigo em C++?

Uma função de amigo em C++ é uma função declarada fora de uma classe, mas tem acesso aos membros privados e protegidos da classe. Embora os membros privados de uma determinada classe sejam inacessíveis a funções não-membro, declará-los como funções amigas lhes dá acesso aos membros privados e protegidos das classes.

Confira a Certificação Avançada do upGrad em DevOps

Características da Função Amigo

A função amigo em C++ tem as seguintes características:

  • A função amigo está fora do escopo da classe para a qual foi declarada amiga
  • Uma função de amigo pode ser um membro de uma classe ou uma função declarada fora do escopo da classe
  • A funcionalidade de amigo não se limita a uma única classe.

Explore nossos cursos populares de engenharia de software

Mestre em Ciência da Computação pela LJMU & IIITB Programa de Certificado de Segurança Cibernética Caltech CTME
Curso de Desenvolvimento Full Stack Programa PG em Blockchain
Programa PG Executivo em Desenvolvimento Full Stack
Veja todos os nossos cursos abaixo
Cursos de Engenharia de Software

  • Invocar uma função de amigo é como invocar qualquer função normal da classe sem usar o objeto
  • Não podemos invocar a função amigo usando o objeto, pois não está no escopo da classe
  • Funções amigas em C++ têm objetos como argumentos
  • Podemos declarar uma função de amigo na parte privada ou pública
  • Os nomes dos membros não são diretamente acessíveis a uma função de amigo, e ela precisa usar o operador de associação de ponto e o nome do objeto com o nome do membro

Confira a Certificação Avançada em Segurança Cibernética do upGrad

Sintaxe da função Friend

Para declarar a função friend, usamos a palavra-chave friend dentro do corpo da classe. A sintaxe da função amigo é:

classe classNome {

… .. …

amigo returnType functionName(lista de argumentos);

… .. …

}

Habilidades de desenvolvimento de software sob demanda

Cursos de JavaScript Cursos básicos de Java Cursos de Estruturas de Dados
Cursos Node.js Cursos de SQL Cursos de desenvolvimento full stack
Cursos NFT Cursos de DevOps Cursos de Big Data
Cursos React.js Cursos de segurança cibernética Cursos de computação em nuvem
Cursos de Design de Banco de Dados Cursos de Python Cursos de criptomoedas

Se dividirmos a sintaxe, aqui está o que cada termo significa:

  • amigo é a palavra-chave que indica que a função é uma função amigo
  • returnType é o tipo de retorno da função
  • functionName é o nome da função que se tornou amiga da classe
  • arg list são os argumentos que passaremos

Aprenda cursos de desenvolvimento de software online das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.

Exemplo de uma função de amigo C++

Agora, vamos ver alguns programas para ilustrar a função de amigo.

Exemplo 1: função de amigo C++ para imprimir a altura de uma caixa

#include <iostream>

usando o namespace std;

Caixa de aula

{

privado:

altura int;

público:

Caixa(): altura(0) { }

amigo int printHeight(Box); //função amigo

};

int printAltura(Caixa h)

{

h.altura += 40;

retornar h.altura;

}

int main()

{

Caixa h;

cout<<“Altura da caixa: “<< printHeight(h)<<endl;

retornar 0;

}

Leia nossos artigos populares relacionados ao desenvolvimento de software

Como implementar a abstração de dados em Java? O que é classe interna em Java? Identificadores Java: Definição, Sintaxe e Exemplos
Entendendo o encapsulamento em OOPS com exemplos Argumentos de linha de comando em C explicados Os 10 principais recursos e características da computação em nuvem em 2022
Polimorfismo em Java: Conceitos, Tipos, Características e Exemplos Pacotes em Java e como usá-los? Tutorial do Git para iniciantes: aprenda o Git do zero

Resultado:

Altura da caixa: 40

Exemplo 2: Quando a função de amigo C++ é amigável para duas classes

#include <iostream>

usando o namespace std;

// declaração de encaminhamento

classe Classe Q;

classe ClasseP {

público:

// construtor para inicializar numP para 12

ClassP() : numP(12) {}

privado:

int numP;

// declaração da função amigo

amigo int add(ClassP, ClassQ);

};

classe Classe Q {

público:

// construtor para inicializar numQ para 1

ClassQ() : numQ(1) {}

privado:

int numQ;

// declaração da função amigo

amigo int add(ClassP, ClassQ);

};

// acessa membros de ambas as classes

int add(ClassP objectP, ClassQ objectQ) {

return (objetoP.numP + objetoQ.numQ);

}

int main(){

ClassP objetoP;

ClassQ objectQ;

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

retornar 0;

}

Resultado:

Soma: 13

No exemplo acima, a Classe P e a Classe Q declararam add() como uma função amiga, dando acesso aos dados privados de ambas as classes. Além disso, a função amigo dentro da classe P está usando a classe Q.

Então, fazemos uma declaração de encaminhamento da Classe Q no programa.

Implementando uma função de amigo

Para ter uma ideia melhor da função de amigo em C++, veremos agora as duas maneiras pelas quais podemos implementar a função de amigo.

  1. Implementando uma função de amigo em C++ através de um método de outra classe

Declaramos uma classe amiga em C++ quando precisamos acessar os membros privados e protegidos de outra classe na qual ela foi declarada amiga. Também é possível declarar uma única função de membro de outra classe como amiga.

classe class_name

{

classe amiga classe_amiga;// declarando classe amiga

};

classe amigo_classe

{

};

Na declaração acima da classe amiga, todas as funções em classe_amiga são as funções amigas de nome_classe .

Aqui está um exemplo simples para ilustrar a implementação de funções de amigo através de um método de outra classe:

#include <iostream>

usando o namespace std;

classe A

{

intp=4;

amigo classe B; //classe de amigos

};

classe B

{

público:

exibição nula (A &a)

{

cout<<”Valor de p é:” <<ap;

}

};

int principal()

{

A a;

Bb;

  1. exibição (a);

retornar 0;

}

Resultado:

O valor de p é: 4

  1. Implementando uma função global

A implementação de uma função global de amigo nos permite acessar todos os membros protegidos e privados da declaração de classe global. Aqui está um exemplo:

#include<iostream>

usando o namespace std;

espaço de aula

{

int um;

intb;

intc;

público:

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

void exibição(void);

operador void amigo- (espaço &s);

};

void space ::setdata (int x, int y, int z)

{

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

}

espaço vazio::display(void)

{

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

}

operador void- (espaço &s)

{

sa =- sa;

sb =- sb;

sc =- sc;

}

int principal()

{

espaço s;

  1. setdata (9,2,3);

cout<<“s:”;

  1. exibição ();

-s;

cout<<“-s:”;

  1. exibição ();

retornar 0;

}

Resultado:

s: 9 2 3

-s: -9 -2 -3

No programa de exemplo acima, operator- é a função friend que declaramos globalmente no escopo da classe.

O que é classe de amigo em C++?

Embora seja bastante evidente agora, uma classe amiga é uma classe que tem acesso aos membros privados e protegidos da classe na qual ela é declarada amiga.

Em termos simples, uma classe de amigo em C++ é usada quando queremos que uma classe tenha acesso aos membros privados e protegidos de outra classe.

As funções-membro da classe que declaramos como amigas para outra classe são funções amigas para a classe amiga. Assim, as funções de amigo ligam ambas as classes.

Sintaxe da classe Friend

Aqui está a sintaxe de uma classe de amigo em C++:

classe R; //declaração de encaminhamento

classe P{

// Outras Declarações

amigo classe R;

};

classe R{

// Declarações

};

Na ilustração acima, a Classe R é amiga da Classe P. Como resultado, a Classe R pode acessar os membros de dados privados da Classe P. No entanto, o inverso não é verdadeiro e a Classe P não pode acessar os membros de dados privados da Classe R .

Além disso, a declaração de encaminhamento é fornecida para informar ao compilador da existência de uma entidade antes que ela seja definida categoricamente. Aqui, declaramos a Classe R usando a declaração de encaminhamento para notificar o compilador de sua existência. A declaração forward nos permite usar os objetos da Classe R na Classe P.

Qual é o uso da função amigo em C++?

Resumindo nossa discussão, vejamos os dois principais usos da função friend em C++:

  • Primeiro, usamos a função friend quando queremos acessar os membros private e protected de uma classe. Para fazer isso, geralmente exigiríamos que os objetos dessa classe acessassem os membros privados e protegidos. No entanto, a função amigo elimina a situação em que a função precisa ser um membro da classe para obter acesso.
  • Outro uso da função friend em C++ é na sobrecarga de operadores. Funções com o mesmo nome, mas com números e argumentos diferentes, são conhecidas como funções de sobrecarga. As funções Friend em C++ encontram uso na sobrecarga de operadores.

Nesse caso, a função de sobrecarga do operador precede a palavra-chave friend e declara um escopo de classe de função. Quando sobrecarregados pela função friend, os operadores binários recebem dois argumentos explícitos, enquanto os operadores unários recebem um argumento. Funciona da mesma maneira que uma função de operador binário, exceto que a implementação da função de operador amigo ocorre fora do escopo da classe.

Isso nos leva ao final de nossa discussão sobre a função de amigo em C++ e seus usos. Espero que isso ajude você a aprofundar seu conhecimento de C++.

Além disso, se você deseja iniciar sua carreira como desenvolvedor full-stack, o upGrad oferece um Programa de Pós-Graduação Executiva totalmente online em Desenvolvimento de Software – Especialização em Desenvolvimento Full Stack de 13 meses em colaboração com o IIIT Bangalore.

Destaques do programa:

  • Exposição prática a estudos de caso e atribuições relevantes do setor
  • Mais de 450 horas de aprendizado em 360 graus
  • 10+ principais ferramentas e linguagens de programação
  • Sessões de mentoria de carreira 1:1 com mentores do setor
  • Suporte ao aluno 24 horas por dia, 7 dias por semana

Inscreva-se hoje para obter os benefícios exclusivos do upGrad hoje mesmo!

Qual é a função amigo em C++?

Uma função de amigo em C++ é uma função que não é membro de uma classe, mas tem acesso a seus membros privados e protegidos.

Como você declara uma função de amigo?

Uma função de amigo tem acesso aos dados privados e protegidos de uma classe. Para declarar uma função amigo, usamos a palavra-chave friend dentro do corpo da classe.

Como você faz um amigo de classe em C++?

Usamos a palavra-chave friend para declarar uma classe como uma classe amiga em C++. A palavra-chave permite que qualquer classe acesse membros privados e protegidos de outras classes e funções.