Relembrando
Nos cursos anteriores vimos que as bibliotecas eram coleções de recursos que eram incluídas nas linhas iniciais de nossos programas para que eles ganhassem funcionalidades. Algumas bibliotecas vem "de fábrica" com a linguagem e são chamadas de bibliotecas padrão. Outras podem ser criadas pelo desenvolvedor para serem reutilizadas em seus programas. Relembrou?
Bibliotecas em C++
Todos os nossos exemplos nesse curso utilizaram uma biblioteca padrão para poder trabalhar com os dispositivos de entrada e saída. No caso era a iostream que era incluída no programa através da declaração #include <iostream>. Também chegamos a utilizar #include <string> para dar ao programa funcionalidades relacionadas a manipulação de strings.
Cabe lembrar que na linguagem C fazíamos a mesma coisa e, segundo nossas referências, o C++ aceita todas bibliotecas da linguagem C. Esclarecendo que o inverso não é verdadeiro, tendo em vista que em C uma biblioteca é uma coleção de funções e variáveis, enquanto em C++ uma biblioteca também é um coleção de classes.
A seguir veremos alguns exemplos com o uso de outras bibliotecas que podem ser de interesse do estudante de Sistemas Embarcados:
- #include <iostream>
- #include <cmath>
- #include <ctime>
- #include <cstdlib>
- using namespace std;
- int main() {
- cout << "Raiz quadrada de 25: "<<sqrt(25) << "\n";
- cout << "Arredondando 6,9: "<<round(6.9) << "\n";
- cout << "Logaritmo de 2: "<<log(2) << "\n";
- cout << "Nº de segundos entre 01/01/1970 e agora: "<<time(NULL) << "\n";
- time_t data= time(NULL);
- cout << "Data atual: "<<ctime(&data) << "\n";
- cout << "Número pseudoaleatório: "<<rand() << "\n";
- cout << "Número pseudoaleatório entre 0 e 100: "<<rand()%101 << "\n";
- srand(time(NULL));
- cout << "Número aleatório entre 0 e 100: "<<rand()%101<< "\n";
- return 0;
- }
Nesse exemplo inclui a biblioteca cmath que oferece recursos para cálculos matemáticos, como a função sqrt() para cálculo de raiz quadrada, round() para arredondar números decimais e log() para retornar o logaritmo de um número.
Já a biblioteca ctime oferece funcionalidades que permitem trabalhar com data e hora. Por exemplo, time(NULL) calcula o número de segundos entre 1º de janeiro de 1970 até a data atual e isso é o que chamamos de timestamp.
Já ctime() retorna uma string que representa a data e hora atual para o meridiano de Greenwich em um formato internacional. No entanto, para o seu uso é necessário passar como parâmetro a referência a um dado do tipo timestamp, como temos na linha 14.
Esse timestamp que chamei de data foi criado na linha 13, de forma semelhante a um instanciamento como se o tipo time_t fosse uma classe e lhe foi atribuído o valor da timestamp atual. Veremos mais sobre manipulação de datas posteriormente.
Por último, também incluí a biblioteca cstdlib de múltiplos propósito que, entre outra coisa, permite o uso da função rand() que retorna um número "aleatório". A instrução rand()%101 permite especificar que esse número seja entre 0 e 100, por exemplo.
No entanto, se você repetir a execução desse código várias vezes, verá que esses números aleatórios se repetem, porque na realidade segue um padrão para gerá-los, por isso o chamamos de pseudoaleatórios.
Para corrigir esse problema, podemos fazer uso de srand() que define um ponto de partida para a geração desses pseudoaleatórios. Esse função deverá ser usada uma linha antes do rand() e com um número inteiro como parâmetro. Para deixar o resultado realmente aleatório, esse parâmetro pode ser o timestamp da hora atual. É o que vemos entre as linhas 17 e 18.
Usando sua própria biblioteca
Assim como vimos na linguagem C, podemos criar um arquivo de cabeçalho no C++ contendo as definições de funções, classes ou variáveis e reutilizá-lo nos nossos programas. Nesse caso trabalhamos com mais de um arquivo: um de programa e outro de cabeçalho. Mostraremos abaixo como trabalhar com esse dois arquivos na plataforma GBD Online.
Para isso copie e cole o código abaixo em uma janela do GDB Online ajustada para a language C++:
- #include <iostream>
- #include <string>
- #include "biblioteca.hpp"
- using namespace std;
- int main() {
- Aluno aluno1("Gabriel",10);
- Aluno aluno2("Marta",8);
- Aluno aluno3("Joaquim",9);
- cout <<aluno1.nome << " " << aluno1.nota << "\n";
- cout <<aluno2.nome << " " << aluno2.nota <<"\n";
- cout <<aluno3.nome << " " << aluno3.nota <<"\n";
- cout <<mensagem<<"\n";
- return 0;
- }
Repare que eu mandei incluir na linha 3 um arquivo de cabeçalho chamado "biblioteca.hpp". Por convenção, geralmente se adota como extensão para o arquivos de cabeçalho em C++ a extensão hpp (header plus plus).
Esse que você copiou e colou no GDB Online é o arquivo main.cpp. Note que ele faz uso de um classe chamada Aluno nas linhas 7 a 9, mas que não está definida nesse arquivo porque eu vou defini-la no arquivo de cabeçalho.
Para isso pressione CTRL+M ou clique no botão NEW FILE do GDB Online e digite como nome do novo arquivo biblioteca.hpp como na figura abaixo:
![]() |
Código do arquivo de cabeçalho "biblioteca.hpp" |
Agora copie e cole o código abaixo nessa nova janela do GDB Online:
- #include <iostream>
- #include <string>
- #define mensagem "Curso de C++"
- using namespace std;
- class Aluno {
- public:
- string nome;
- int nota;
- Aluno(string x, int y){
- nome =x;
- nota =y;
- }
- };
Repare que esse arquivo define como será a classe Aluno com seus atributos e seu construtor, coisa que já explicamos. Nesse exemplo queremos apenas mostrar como se trabalha com o arquivo de cabeçalho e o de programa. Agora mande executar o código pressionando F9.
Você deve ter visto que ele executou o código de main.cpp porque buscou a classe Aluno no arquivo de cabeçalho que está sendo a nossa biblioteca, algo muito parecido com que vimos na linguagem C. A diferença é que agora podemos ter classes e objetos na nossa biblioteca.
Usando o Define
Repare também que na linha 3 do arquivo de biblioteca eu tenho o uso da instrução #define que é uma diretiva de compilação, isto é, ela define alguma coisa para compilador. No caso ela permite definir uma string como identificador para o qual será atribuído um valor.
No nosso caso estou falando que o identificador mensagem equivale a string "Curso de C++". Isso faz com que ele mostrará na tela "Curso de C++" quando a linha 13 do programa main.ccp manda a instrução: cout <<mensagem<<"\n";
Com isso vimos também que é possível passar valores constantes através dos arquivos de cabeçalho. Avançaremos mais nas próximas aulas.
Referências
DEITEL, H. M. DEITEL, P. J. C++: Como programar. Pearson Education do Brasil. 2006.
GBDONLINE. Learn C++ Programming. Disponível em: <https://learn.onlinegdb.com/c%2B%2B_for_beginners> Acesso em 05 ago. 2024.
W3SCHOOLS. C++ Tutorial. Disponível em: <https://www.w3schools.com/cpp/default.asp> Acesso em 05 ago. 2024.