Você está na página 1de 12

Fundamentos de Programação:

Conceitos Básicos de C++


Mateus Pereira da Silva1 (IFCE), Jorge Luís Costa Maia2 (IFCE)
1
Rua Sessenta, 260 – José Walter – Fortaleza/CE – CEP 60750-740
mateus.pereira05@aluno.ifce.edu.br
2
Rua Lauro Maia, 255, Apartº 401 - José Bonifácio – Fortaleza/CE – CEP 60055-210
jorge.maia06@aluno.ifce.edu.br
Resumo. A linguagem C++ tem sido uma fonte base para os avanços
tecnológicos. Com sua alta capacidade e flexibilidade para a programação de
programas computacionais, tem se mostrado uma forte ferramenta para o
desenvolvimento rápido e conceitual. Sua forte ligação com a linguagem C e
sua capacidade de Programação Orientada a Objeto, além de sua vasta
derivação de outras linguagens adaptadas à uma, torna esta linguagem uma
fonte riquíssima para o conhecimento e para a evolução das máquinas.

Abstract. The C++ language has been a base source for technological
advances. With its high capacity and flexibility for programming computer
programs, it has been shown to be a strong tool for rapid and conceptual
development. Its strong connection with the C language and its Programming
Oriented Object capacity, in addition to its vast derivation from other languages
adapted to one, makes this language a very rich source for knowledge and for
the evolution of machines.

1. INTRODUÇÃO
Este artigo tem como objetivo discorrer conceitos básicos sobre a linguagem C++.
Durante anos, seu crescimento no universo da programação tem sido notório e
fundamental para sua evolução. De acordo com o RedMonk Programming Language
Rankings, a linguagem C++ está em 5º lugar, empatada com C#, entre as linguagens mais
utilizadas no mundo. Daí vemos a sua importância a nível mundial para o mundo dos
programadores.
Além de status, sua importância inquestionável está no fato de herdar muitos
conceitos do C, porém com inúmeras funcionalidades novas. Ela tem se provado uma
linguagem bastante flexível, por possuir conceitos de outras linguagens fora o C. Embora
isso seja vantajoso, é importante ressaltar que, por possuir uma gama de estruturas
derivadas, sua manipulação deve ser tomada com bastante cautela para que não seja
gerado erros inesperados.
Alguns fatos importantes a serem ressaltados é que esta linguagem foi criada para
ser tão eficiente quanto C, porém com novas funções. Ademais, é uma linguagem que
suporta múltiplos paradigmas, ou seja, possuí uma variedade em sua identidade que juntas
definem sua operação e solução de problemas. Ela possui uma liberdade para a escolha
de opções, mesmo que seja errada; muitos de seus códigos podem ser transferidos para o
C facilmente por serem compatíveis e não é necessário um ambiente de desenvolvimento
muito potente para o seu uso.

2. HISTÓRIA
Criada na década de 80, por Bjarne Stroustrup, Cientista dinamarquês da
computação, no Bell Labs (empresa de pesquisa industrial e desenvolvimento científico),
inicialmente chamada de C with Classes, com o intuito de implementar uma versão
distribuída do núcleo Unix. Como o Unix era um sistema programado em C, Stroustrup
desejava a criação de uma linguagem que fosse compatível. Daí nasceria a principal base
de implementação do C++. Porém, o plano não era criar uma linguagem dependente.
Conseguinte Stroustrup utilizou diversas linguagens como base para sua criação. Entre
elas estão: ALGOL 68, Ada, CLU e ML.
O primeiro compilador C com Classes foi chamado Cfront, que foi derivado de
um compilador C chamado CPre. Era um programa projetado para traduzir C com código
de Classes para C. Um ponto bastante interessante que vale a pena notar é que Cfront foi
escrito principalmente em C com Classes, tornando-o um compilador de hospedagem
automática (um compilador que pode se compilar). O Cfront mais tarde seria abandonado
em 1993, depois que se tornou difícil integrar novos recursos nele, a saber, exceções do
C ++. Mesmo assim, o Cfront teve um grande impacto nas implementações de futuros
compiladores e no sistema operacional Unix.
Antes de seu nome ser alterado, sua implementação usava um pré-processador.
Em 1983, quando seu nome foi alterado para C++, novas características foram atribuídas
a ela. Inicialmente, a linguagem passou a exigir um compilador próprio escrito pelo seu
criador. Funções virtuais, sobrecarga de operações e funções, referências, constantes,
gerenciamento de manual de memória, melhorias na verificação de tipos de dados e estilo
de comentário de código de uma linha.
Assim como a linguagem em si, sua biblioteca padrão também sofreu melhorias
ao longo do tempo. Primeiramente com a E/S e posteriormente a Standard Template
Library (STL) algumas das principais funcionalidades que à distanciaram do C.

3.BIBLIOTECAS
Inicialmente, quando era chamado de C with Classes, as bibliotecas iniciais eram
derivadas do C. Mesmo com suas atualizações ela ainda continuou com essas bibliotecas,
porém, novas foram criadas para a implementação do C++.
A biblioteca padrão do C++ fornece vários containers genéricos, funções que
utilizam e manipulam tais containers, funções-objeto, cadeias de
caracteres e streams genéricos, suporte para algumas facilidades da linguagem e funções
de uso geral, como funções matemáticas.
Os containers genéricos são uma implementação de elementos conhecidos
em estrutura de dados. Diferentes containers compartilham uma mesma interface, o
acesso é o mesmo. A escolha do uso geralmente depende da eficiência em determinadas
tarefas que o container deverá desempenhar, o que está relacionado com a implementação
interna da classe. Por exemplo, alguns containers são mais eficientes em busca e menos
eficientes em inserções. São vários os tipos de bibliotecas, porém explanaremos algumas
mais importantes para os conceitos básicos da linguagem.
3.1. ESTRADA E SAÍDA
As bibliotecas de estrada e saída de dados são essenciais em qualquer linguagem,
pois sempre iremos está trabalhando com estruturas que demandam estas funcionalidades.
No C++, a principal é a <Iostream>, que representa uma evolução da <stdio.h> do C. Ela
é responsável pela manipulação de fluxo de dados padrão do sistema (entrada padrão,
saída padrão e saída de erros padrão). Nesse caso usamos o Cin e o Cout, um para a
entrada padrão e o outro para a saída padrão.
3.2. OPERAÇÕES NUMÉRICAS
As bibliotecas de operações numéricas são essenciais para a simplificação de
códigos por meio de funções já existentes, sendo necessário somente codificá-la para sua
utilização. Com essa funcionalidade, diminui-se bastante o número de linhas de código,
um conceito essencial para códigos de grande escala.
Como escolhemos trabalhar com conceitos básicos, a biblioteca que falaremos um
pouco será a <numeric>, biblioteca típica da linguagem em estudo. Este cabeçalho
descreve um conjunto de algoritmos para realizar certas operações em sequências de
valores numéricos. Devido à sua flexibilidade, eles também podem ser adaptados para
outros tipos de sequências.
Algumas de suas funções são:
• accumulate: acumula valores no intervalo;
• adjacent_difference: calcula a diferença adjacente de intervalo;
• inner_product: calcula o produto interno cumulativo do intervalo;
• partial_sum: calcula somas parciais de intervalo;
• iota: armazena sequência crescente;
3.3. <STRING>
Este cabeçalho apresenta tipos de string, traços de caracteres e um conjunto de
funções de conversão:
• stoi: Converte uma sting em um inteiro
• stol: Converte uma sting em um long int
• stoul: Converte string em inteiro sem sinal
• stoll: Converte string em long long
• stoull: Converte string em long long sem sinal
• stof: Converte string em float
• stod: Converte string em double
• stold: Converte string em long double
3.4. BIBLIOTECAS DERIVADAS DO C
Como citamos no início, algumas bibliotecas do C foram reutilizadas no C++, por
este motivo, facilita-se a decodificação de um código em C++ para um código C. Algumas
delas são muito importantes para a linguagem em estudo, outras nem tanto. Citaremos
aqui algumas bibliotecas que foram adaptadas do C para o C++:
• <cassert> - adequação de <assert.h>
• <cctype> - adequação de <ctype.h>
• <cerrno> - adequação de <errno.h>
• <cfloat> - adequação de <float.h>
• <climits> - adequação de <limits.h>
• <cmath> - adequação de <math.h>
• <csetjmp> - adequação de <setjmp.h>
• <csignal> - adequação de <signal.h>
• <cstdlib> - adequação de <stdlib.h>
• <cstddef> - adequação de <stddef.h>
• <cstdarg> - adequação de <stdarg.h>
• <ctime> - adequação de <time.h>
• <cstdio> - adequação de <stdio.h>
• <cstring> - adequação de <string.h>
• <cwchar> - adequação de <wchar.h>
• <cwctype> - adequação de <wctype.h>
Dentre elas, as que falaremos um pouco serão a <cmath> e a <ctime>. A <cmath>,
derivada da <math.h>, declara um conjunto de funções para calcular operações e
transformações matemáticas comuns. Dentre elas, funções trigonométricas, funções
exponenciais, funções hiperbólicas, entre outras. Já a <ctime>, derivada da <time.h>, é
responsável por declarar funções que manipulam data e hora.
3.5. ESTRUTURA DA DECLARAÇÃO
Para declarar uma biblioteca em C++, usamos os sinais “<” e “>” e entre eles
colocaremos a biblioteca que queremos utilizar. Dessa forma, traremos todas as
funcionalidades e variáveis contidas dentro da biblioteca. (Ver Figura 1)
Figura 1

4. ESTRUTURA C++
A estrutura base do C++, consiste na declaração das bibliotecas seguido da função
principal aberta e fechada com chaves como na figura 2:

Figura 2

4.1. NAMESPACE STD


A declaração de using namespace std é usada para se identificar o uso de
espaçamentos das saídas e entradas de dados. Caso não fosse declarada, a cada comando
de saída de dados utilizaríamos ::std, dessa forma estaríamos utilizando a função dentro
da linha de código a qual foi declarada. Usando a forma como está na figura 2, estaríamos
declarando de forma global.
4.2. RETURN
A palavra return, é usada para retornar algum valor ao final de um bloco de
código. Há ainda a possibilidade de não retornar nada. No caso do return utilizando na
mais, utilizamos o return 0, para verificar o final do bloco. Caso o bloco esteja totalmente
encerrado e retorna o código corretamente, caso esteja dando algum conflito de valores
ele vai apresentar um erro.
4.3. USO DO (;)
O uso do ponto e virgula em C++, representa a finalização de uma linha de código.
Este artificio é obrigatório na linguagem, isento na criação de um bloco e no final da
chave de um bloco. É essencial não esquecer este artificio para que seus códigos não
gerem erros, por ser uma linguagem sequencial, ou seja, ler linha por linha, é necessário
que o compilador entenda o fim de uma linha de código.
4.4. ESTRUTURA DE ENTRADA E SAÍDA
Para printar um certo valor (saída de dado) na tela ou ler (entrada de dado)
atribuído pelo usuário, utilizaremos as palavras reservadas Cout e Cin. Utilizando o Cout
<<, estaremos atribuindo tudo o que foi digitado entre aspas após o comando, a Cout. Já
o Cin >> é reservado uma variável para receber o dado fornecido. (Figura 3)

Figura 3

5. VARIÁVEIS
Variáveis são valores que atribuímos, modificamos e usamos durante um código.
Em C++ as variáveis são case sensitive, elas se distinguem em Maiúscula e minúsculo,
ou seja, se eu declaro uma variável chamada “nome” e tento acessá-la no meu código
como “Nome”, apresentará um erro de sintaxe pois, da mesma forma que a variável foi
declarada, ela deverá ser chamada durante o meu código.
5.1. TIPOS
Em linguagem de programação, os tipos são valores os quais podem ser atribuídos
a uma determinada variável. Em C++, temos os tipos:
• int: Utilizado para atribuir valores inteiros; (Ex.: 2, -4;)
• float: Utilizados para atribuir valores reais de até 7 casas decimais; (Ex.: 1,0001)
• double: Utilizado para atribuir valores reais de até 15 casas decimais; (Ex.:
2,123456789123456)
• bool: Utilizado para representar valores lógicos; (Ex.: True, False)
• char: Utilizado para representar caracteres da tabela ASCII. (Ex.: !, *,nome)
Figura 4

6. ESTRUTURAS DE REPETIÇÃO
As estruturas de repetição servem para gerar loops finitos e infinitos. Em C++ as
mais conhecidas são as estruturas while, do/while e for. São blocos que programamos
com uma determinada sentença a ser avaliada para gerar uma repetição. A seguir, veremos
mais detalhadamente como funciona cada uma dessas estruturas.
6.1. WHILE
No while, teremos uma sentença que será avaliada. Caso seja verdadeira, será
efetuada uma ação que será descrita em um bloco de código. Sempre que a sentença
avaliada for verdadeira ao passo que meu loop acontece, será executado o código dentro
do bloco, no entanto, se em algum momento a sentença for falsa, meu código será
encerrado na estrutura. (ver Figura 4)

Figura 5
6.2. DO/WHILE
O do/while, funcionará praticamente da mesma forma que o while. A única
diferença entre os dois é que ao invés de analisar a sentença para depois executar o bloco,
primeiramente será executada a ação dentro do bloco que ficará após o do, e este bloco
será executado até ser falsa a sentença de while que estará após o bloco referente a do.
(Ver Figura 5)

Figura 6

6.3. FOR
O for não é muito diferente das outras estruturas de repetição. Nele criaremos um
ponto de partida, analisaremos uma sentença e depois realizamos uma ação qualquer.
Depois de criado, executaremos um bloco de códigos com os comandos desejados para a
operação declarada. (Ver Figura 6).

Figura 7
7. ESTRUTURA CONDICIONAL
As estruturas condicionais são dadas para alinhar uma condição a uma ação. Elas
trabalham com verificações lógicas, verifica-se algumas condições e associam essas
condições a ações. Estudaremos nesse caso a estrutura if /else.
7.1 IF/ELSE
A estrutura if/else funciona da seguinte maneira. Primeiro criaremos uma
sentença, caso essa sentença seja verdadeira, então executaremos uma série de comando
dentro de um bloco de código. Caso a sentença seja falsa, existem duas possibilidades, ou
o bloco de código é encerrado e segue normalmente, ou usaremos a palavra reservada else
para criar uma nova condição de parada para o meu if. (Ver Figura 7).

Figura 8

8. ORIENTAÇÃO A OBJETO
A programação é realizada definindo e implementando tipos de dados abstratos e
as suas relações, tentando modelar a realidade, desenvolvendo programas que fazem
interagir objetos. Os objetos são instâncias de tipos de dados abstratos obtidos a partir da
abstração de conjuntos de objetos os quais foram modelados identificando as suas
características essenciais e ignorando as características acidentais. Dez são os conceitos
principais que é preciso aprender para entender a programação orientada para objetos:
objeto, método, mensagem, classe, subclasse, instância, herança, encapsulamento,
abstração e polimorfismo. Descreveremos aqui só alguns conceitos básicos.

8.1. ABSTRAÇÃO DE DADOS


Para falarmos de Programação Orientada a Objetos (POO), precisamos passar
pelo conceito de abstração de dados. De forma resumida, um dado abstrato seria um
conjunto de características derivadas de um objeto real. Por exemplo, suponhamos que se
queira trabalhar com funcionários de uma dada empresa. Sabemos que os funcionários
possuem características que os definem na vida real. O que fazemos em POO, é selecionar
uma dessas atribuições e defini-las no sistema. De forma abstrata, é como se tivéssemos
criado um novo “ser” dentro de um sistema. No caso desses modelos, sempre iremos
selecionar as características essências para definir nossos objetos e deixaremos de lado as
irrelevantes. Assim, manipularemos de forma otimizada e compreensível ao sistema.
8.2 CLASSES E OBJETOS
Em geral, uma classe oferece uma máscara com a qual seu programa pode mais
tarde criar objetos. Por exemplo, a classe arquivo previamente discutida, descreve as
funções-membro e variáveis que irão ser usadas pelos objetos-arquivo que seu programa
criar no futuro. Um objeto por esse motivo é uma instância de uma máscara da classe. Em
outras palavras, um objeto é a entidade ou coisa com a qual seus programas trabalham.

9. VANTAGENS E DESVANTAGENS

9.1. VANTAGENS
O C++ tem recursos que permitem escrever códigos mais eficientes que em C,
mantendo a elegância. Observe templates e funções constexpr como um exemplo. Mas
claro, em C++ você tem muitos recursos de alto nível que seriam menos eficientes que
lidar com a implementação mais simples. Além das técnicas que já eram suportadas pela
linguagem C, C++ permite o uso de Orientação a Objetos e também de Programação
Genérica, adaptando-se assim às diferentes necessidades requeridas pela criação de
softwares.
Ao contrário de algumas linguagens, C++ não cria restrições ao programador. É
ele quem decide se quer correr riscos ou se quer maior segurança no seu código. Há
poucas regras arbitrárias em C++ (como também na linguagem C). A maioria dos
conceitos e regras de sintaxe são combináveis e aplicáveis por decorrência lógica.
9.2. DESVANTAGENS
Uma das primeiras coisas que acontece quando surge uma arquitetura nova é a
criação de um compilador para a linguagem C (talvez tomando por base um compilador
existente, apenas acrescentando um novo target). O ponto é que qualquer que seja a
arquitetura que você encontre, é praticamente garantido que você pode escrever um
programa em C e compilar nela. Isso ocorre porque C é uma linguagem "simples" e de
bastante baixo nível. C++ é imensamente mais complexo e é provável que venha a
encontrar arquiteturas que ainda não tenham suporte para a linguagem.
Compatibilidade com o C, herdou os problemas de entendimento de sintaxe do
mesmo; os compiladores atuais nem sempre produzem o código mais otimizado, tanto
em velocidade quando tamanho do código;

10. PROGRAMAS QUE UTILIZARAM C++


Atualmente, diversas empresas utilizam o C++ em seus projetos. Vimos que ela
possui flexibilidade para ser usada, compatibilidade com a linguagem C, além se ser
capaz de ser trabalhada tanto em projetos mais complexos como em projetos mais
simples. Algumas empresas conhecidas utilizaram-se dessa linguagem para
implementar funcionalidades em seus sistemas. A exemplo temos, a Adobe Systems
que utilizou para implementar funcionalidades do Adobe Acrobat e Photoshop. Temos
também o Mozilla Firefox
REFERÊNCIAS

O’Grady, Stephen (2020), The RedMork Programming Language Rankings: June 2020,
https://redmonk.com/sogrady/2020/07/27/language-rankings-6-20/.
Pacievitch, Yuri. C++ - InfoEscola, Navegando e Aprendendo.
https://www.infoescola.com/informatica/cpp/.
C++ Library Reference (em inglês). cplusplus.com - The C++ Resources Network.
Consultado em 28 Junho de 2021.
Linguagem C++. https://codelogica.wordpress.com/2018/02/17/linguagem-c/ -
consultado em 28 Junho de 2021.

LINKS
Vídeo Apresentação:
https://drive.google.com/file/d/1sQ-zKlWsITID_Q-
EZwmjvY6JGttaxn2F/view?usp=sharing

Você também pode gostar