Aula prática 13

Sumário

Objectivos

Os alunos no final das aulas 13 e 14 deverão conhecer:

  1. A utilidade do conceito de rotinas em-linha.
  2. As vantagens da utilização da palavra chave const em classes:
    1. Em operações que não alteram a variável implícita.
    2. Em parâmetros (passagem de argumentos por referência constante).
    3. Em tipos de devolução.
  3. A possibilidade de devolução por referência.
  4. A noção de CIC (Condição Invariante de Classe) e sua utilidade.
  5. A possibilidade de sobrecarga de operadores para classes C++.
  6. As noções de amizade e de membros de classe ou estáticos.

Deverão também ser capazes de:

  1. Definir completa e disciplinadamente TAD.
  2. Usar TAD em programas onde a sua utilização se justifique.
  3. Implementar TAD através de classes C++, incluindo a respectiva documentação, usando programação por contrato (i.e., com PC e CO especificadas e verificadas em cada rotina membro e com CIC especificada e verificada em cada rotina membro) e fazendo testes de unidade.

A aula destina-se também a resolver o Trabalho Final.

Caso os alunos sintam que os objectivos não foram atingidos na totalidade deverão concluir/repetir os exercícios desta aula autonomamente e ou recorrer aos horários de dúvidas.

Resumo

O resumo da matéria abordada nesta aula prática pode ser consultado aqui.

Exercícios

1.  Já terminou o Trabalho Final?  Ainda não!?  Do que está à espera?


2.  Complete o TAD Complexo apresentado no ficheiro complexo.C (que se encontra no directório ~/IP/Aula13) de modo a que seja possível utilizar os seguintes operadores sobre números complexos: +=, -=, *=, /=, +, -, *, /, ==, != e >> [este último tem um canal como primeiro operando]).  Relembra-se que a divisão de um número complexo (x + i y) / (w + i z) tem como resultado ((x × w + y × z) + i (y × w - x × z)) / (w2 + z2).


3.a)  Construa um TAD Mapa que associe cadeias de caracteres e inteiros associados.  Cada cadeia de caracteres está associada a um e um só inteiro.  Este tipo poderia servir para guardar nomes de variáveis e os respectivos valores numa calculadora.

A classe C++ Mapa deve permitir as seguintes instruções:

Mapa variáveis(10); // criação de um mapa em que as cadeias de caracteres estão associadas,
                    // por omissão, ao valor inteiro 10.

variáveis.mudaValorDe("x", 2);  // associa o valor 2 à cadeia de caracteres "x" no mapa
                                // de variáveis.

variáveis.mudaValorDe("y", 3);

variáveis.mudaValorDe("z", variáveis.valorDe("y"));

cout << variáveis.valorDe("x") << endl; // mostra 2!
cout << variáveis.valorDe("y")
<< endl; // mostra 3!
cout << variáveis.valorDe("z")
<< endl; // mostra 3!
cout << variáveis.valorDe("w") << endl; // mostra 10!

Antes de escrever qualquer código em C++ pense nas operações que devem ser suportadas pelo novo tipo.  Desenvolva esta classe da mesma forma que foi sugerida para o exercício das filas de espera, na Aula prática 10. Escreva um pequeno programa que faça uso do TAD desenvolvido.

Nota:  Podem-se definir classes C++ dentro de outras classes C++ (chamam-se classes C++ embutidas).  Considere a possibilidade de definir a estrutura (classe C++ com todos os membros públicos)

struct Par {
    string chave;
    int valor;
};

como membro privado da classe C++ Mapa.

3.b)  Modifique a classe C++ Mapa sobrecarregando do operador [] de modo a permitir as seguintes instruções:

Mapa variáveis(10); // criação de um mapa em que as cadeias de caracteres estão associadas,
                    // por omissão, ao valor inteiro 10.

variáveis["x"] = 2;
variáveis["y"] = 3;
variáveis["z"] = variáveis["y"];

cout << variáveis["x"] << endl; // mostra 2!
cout << variáveis["y"] << endl; //
mostra 3!
cout << variáveis["z"] << endl; //
mostra 3!
cout << variáveis["w"] << endl; // mostra 10!

3.c)  Substitua as utilizações da classe C++ Mapa pela classe map<string, int> na função main() do seu programa de exemplo.  Veja o exemplo no ficheiro mapa_de_digitos.C (que se encontra no directório ~/IP/Aula13) para verificar como funciona a classe modelo map.