Prévia do material em texto
LINGUAGEM DE PROGRAMAÇÃO Priscila Gonçalves Sobrecarga em C++ Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Definir o que é sobrecarga. � Identificar o polimorfismo. � Construir uma aplicação de sobrecarga. Introdução Em orientação a objetos, a sobrecarga de método ocorre quando temos dois métodos com mesmo nome, mas com assinaturas diferentes, isto é, diferentes números e tipos de parâmetros. Dois métodos podem ter o mesmo nome se tiverem diferentes números e tipos de parâmetros, portanto, diferentes assinaturas. Neste capítulo, você estudará a sobrecarga e sua aplicação, identificará o polimorfismo e aprenderá como construir as aplicações de sobrecarga. Conceito Quando falamos sobre orientação a objetos, vemos que, geralmente, a sobre- carga de método ocorre quando temos dois métodos que possuem o mesmo nome, mas com diferentes assinaturas, ou seja, diferentes tipos e quantidades de parâmetros. Para que você entenda melhor, suponha que dois métodos tenham o mesmo nome, mas possuam diferentes tipos de parâmetros e dife- rentes números, obtendo, assim, assinaturas diferentes. Em Java, por exemplo, dois ou mais métodos em uma classe podem ter o mesmo nome, desde que os parâmetros declarados sejam diferentes. O polimorfismo é implementado por meio da sobrecarga. Sobrecarga em C++2 Em C++ você pode fazer uso de sobrecarga em funções e operadores, como apresentado na Figura 1. Dessa forma, fornecerá mais de uma definição para um determinado nome de função dentro do mesmo programa. Em geral, o compilador é quem faz a seleção sobre qual a versão de função é mais apropriada, ou qual é o melhor operador, baseando nos argumentos com os quais ele é chamado. Para esse procedimento, o compilador deve verificar os seguintes pontos: � objeto que está sendo inicializado; � o lado esquerdo de uma instrução de atribuição; � o argumento formal a uma função; � o argumento formal a um operador definido pelo usuário; � o tipo de retorno de função. Figura 1. Sobrecarga de operadores. Fonte: WikiLivros (2018, documento on-line). 3Sobrecarga em C++ No exemplo da Figura 1, é mostrado um trecho de um código em que x e y não tem referência sobre a qual objeto pertencem. Contudo, a operação ocorre dentro de um dos objetos, o que está antes do operador. Logo, você pode notar que o operador pertence a um dos objetos, obrigatoriamente àquele que o antecede. Dessa forma, neste exemplo foi declarado o segundo dado a operar. Se for selecionada mais de uma função, a sobrecarga será ambígua e apresentará erro, ou seja, a função que deverá ser selecionada será melhor que todas as outras do grupo para, no mínimo, um argumento. Se não ocorrer dessa maneira, a chamada da função irá gerar um erro. Identificação de polimorfismo O polimorfismo é um dos conceitos mais utilizados em programação orientada ao objeto, pois promove a reutilização contínua dos códigos, apresentando a maneira como um método pode assumir formas diferentes das quais foram implementadas inicialmente e agir de modo que possa ser reutilizado, inclu- sive em outra classe. O polimorfismo cria variações de métodos com nomes totalmente iguais em uma classe, contendo listas de argumentos diferentes para que seja feita a separação deles. Em C++ isso ocorre por meio da conversão de ponteiros ou referências, utilizando objetos em hierarquia de classes. Segundo Horstmann (2005), polimorfismo descreve um conjunto de objetos de diferentes classes com comportamento similar. A herança é usada para expressar atributos em comum entre as classes, e as funções virtuais permitem variações no comportamento. Uma das vantagens da sobrecarga é permitir que os métodos relacionados sejam acessados com o uso de um mesmo nome, assim, quando um método for sobrecar- regado, poderá executar qualquer atividade em cada versão existente. Sobrecarga em C++4 Construção de aplicação de sobrecarga Para construir uma aplicação que contenha sobrecarga, você, como progra- mador, terá que declarar dois ou mais métodos da mesma classe que com- partilhem o mesmo nome, porém trazendo declarações de parâmetros de entradas diferentes, ou seja, declarar versões diferentes do mesmo método. Por meio da sobrecarga de operadores, você poderá redefinir o significado da grande maioria dos operadores em C++, quando ao menos um operando for um objeto da classe. Uma informação importante é que não se pode criar operadores em C++, apenas podem ocorrer novas definições para operadores já existentes; e nem todos podem ser sobrecarregados. Veja no Quadro 1 um exemplo de operadores que podem receber a sobrecarga. Operadores unários ! & ( ) * + ++ - -- ~ conversion operators NOT lógico Address-of Operador cast Desreferência de ponteiro Mais unário Incremento Negação unária Decremento Complemento de um Operadores de conversão Operadores binários , != % %= & && &= * *= Vírgula Desigualdade Módulo Atribuição de módulo AND bit a bit AND lógico Atribuição AND de bit a bit Multiplicação Atribuição de multiplicação Quadro 1. Linguagem de programação C++ (Continua) 5Sobrecarga em C++ Quadro 1. Linguagem de programação C++ Operadores binários + += - -= -> ->* / /= < << <<= <= = == > >= >> >>= ^ ^= Adição Atribuição de adição Subtração Atribuição de subtração Seleção de membro Seleção de ponteiro para membro Divisão Atribuição de divisão Menor que Shift esquerda Atrib. de deslocamento para a esquerda Menor ou igual Atribuição Igualdade Maior que Maior ou igual Shift direita Atrib. de deslocamento para a direita OR exclusivo Atribuição de OR exclusivo Operadores unários ou binários ( ) [ ] delete new Chamada de função Subscrito de matriz Delete New (Continuação) Para mostrar o conceito de sobrecarga, veja o código a seguir, em que um salário deverá ser calculado de duas formas: uma somente passando o número de horas trabalhadas no mês; e outra com o salário básico mais o número de horas extras na classe Instrutor (Java ou C#): Sobrecarga em C++6 Observe como a sobrecarga pode ser utilizada: 7Sobrecarga em C++ 1. No desenvolvimento de software, as estruturas disponibilizadas por cada linguagem de programação possuem o intuito de facilitar o momento do desenvolvimento do software. Uma dessas estruturas é a sobrecarga. Assinale a alternativa que traz o conceito correto da sobrecarga. a) Permite que uma classe, possua atributos e métodos de uma classe principal, possibilitando a mudança de comportamento do objeto. b) Ocorre quando temos dois métodos que possuem o mesmo nome, mas com diferentes assinaturas, ou seja, diferentes tipos e quantidades de parâmetros. c) Ao implantar a sobrecarga as classes, as classes derivadas ficam dependentes das classes principais. Sobrecarga em C++8 d) A sobrecarga é responsável por implementar a herança, onde os objetos poderão se adequar a comportamentos diferentes. e) A diferença entre herança e polimorfismo, é devido ao uso de sobrecarga. Na herança a sobrecarga atua, permitindo que a classe derivada se torna dependente da classe principal, atuando sempre em conjunto com a mesma. 2. As classes assumem uma organização hierárquica, com uma classe-base no nível mais alto. As entidades no nível mais baixo da hierarquia herdam os campos de dados (atributos) e funções de nível mais alto. Estamos nos referindo a qual conceito? a) Sobrecarga. b) Polimorfismo. c) Herança. d) Funções. e) Compilador. 3. Qual é o tipo de relação onde toda a instância de uma classe é igualmente uma instância da outra, representando assim, a extensão de classes? a) Ao aplicar o uso da herança e sobrecarga, a seleção da função a ser executadas, será posta em execução. b) A argumentação utilizada no polimorfismo define métodos e atributos que serão utilizados, logo as funções e operadores serão indefinidos. c) A argumentação utilizada no polimorfismo define métodos e atributos que serão utilizados, logo as funçõese operadores serão indefinidos. d) A função e a sobrecarga verificam o argumento formal e o operador, que geralmente é definido pelo usuário. e) O compilador é quem faz a seleção sobre qual a versão de função é mais apropriada, ou qual é o melhor operador, baseando nos argumentos com os quais ele é chamado. 4. A linguagem C++ possui recursos importantes e que podem tornar o código reutilizável de diversas maneiras. Uma destas estruturas permite que haja várias versões de uma mesma função em uma hierarquia de classes. Assinale a alternativa que traz o recurso mencionado. a) Polimorfismo. b) Funções. c) Herança. d) Compilador. e) Sobrecarga. 5. O polimorfismo possibilita que uma função pode provocar diversas ações, tendo como base o tipo de objeto ao qual a função é chamada. Assinale a alternativa que traz conceitos corretos sobre o uso da sobrecarga e polimorfismo . a) A linguagem C++ permite que novas definições ocorram para operadores já existentes. b) Novos operadores podem ser criados, já que a linguagem C++ permite que estes operadores possam ser sobrecarregados. c) A classe derivada obrigatoriamente precisa acessar um construtor da classe principal. A linguagem C++ permite que as instruções executem individualmente. 9Sobrecarga em C++ d) O polimorfismo é utilizado para expressar atributos em comum entre classes. A linguagem C++ não converte ponteiros ou referências. e) Caso algumas funções sejam selecionadas, a sobrecarga será ambígua e executará normalmente as instruções. HORSTMANN, C. Conceitos de computação com o essencial de C++. 3. ed. Porto Alegre: Bookman, 2005. WIKILIVROS. Programar em C++/Sobrecarga de operadores. 2018. Disponível em: <ht- tps://pt.wikibooks.org/wiki/Programar_em_C%2B%2B/Sobrecarga_de_operadores>. Acesso em: 1 jul. 2018. Leituras recomendadas ARNOLD, K.; GOSLING, J.; HOLMES, D. A linguagem de programação Java. 4. ed. Porto Alegre: Bookman, 2007. MEYERS, S. C++ eficaz: 55 maneiras de aprimorar seus programas e projetos. 3. ed. Porto Alegre: Bookman, 2011. MICROSOFT. Sobrecarga de função. c2018. Disponível em: <https://msdn.microsoft. com/pt-br/library/5dhe1hce.aspx>. Acesso em: 4 maio 2018. SCHILDT, H. Java para iniciantes: crie, compile e execute programas. 6. ed. Porto Alegre: Bookman, 2015. WIKILIVROS. Programar em C++. 2011. Disponível em: <https://pt.wikibooks.org/wiki/ Categoria:Livro/Programar_em_C%2B%2B>. Acesso em: 4 maio 2018. Conteúdo: