• Nenhum resultado encontrado

Programando em C++ Joel Saade. Novatec Editora Ltda.

N/A
N/A
Protected

Academic year: 2021

Share "Programando em C++ Joel Saade. Novatec Editora Ltda."

Copied!
9
0
0

Texto

(1)

Programando em C++

Joel Saade

(2)

Capítulo 1

Introdução

Este capítulo trata, de forma breve, a história de C e C++. Apresenta a estrutura básica de um programa C++, o mínimo necessário para o desenvolvimento de qualquer programa. Mostra a criação de um primeiro programa e ainda, de forma introdutória, o conceito de namespaces e as etapas para a criação de programas C++.

Histórico da linguagem C

A linguagem C foi desenvolvida por Dennis M. Ritchie, dos Laboratórios Bell, no início da década de 1970, quando trabalhava no projeto de desenvolvimento do Unix, que seria utilizado em um computador PDP-11 da Digital Equipment Corporation (DEC). Para a criação de um sistema operacional, é necessário uma linguagem de programação concisa, que produza um código compacto, programas rápidos e que controle o hardware de maneira eficiente. Embora a linguagem Assembly pudesse atender a tais necessidades, não seria conveniente utilizá-la, pois o Unix ficaria restrito à plataforma de hardware onde estava sendo desenvolvido. A proposta era a de que o Unix fosse executado em várias plataformas de hardware. Daí a necessidade de uma linguagem que combinasse a eficiência de uma linguagem de baixo- nível (como o Assembly) e a portabilidade de uma linguagem de alto-nível. Nesse contexto, a linguagem C foi criada.

A linguagem C herdou idéias e características de outras linguagens de programação, notadamente da linguagem BCPL, criada em 1967 por Martin Richards, e da linguagem B, criada por Ken Thompson em 1970.

Em 1978, foi publicado o livro The C Programming Language, de Brian W. Kernighan e Dennis M. Ritchie, constituindo-se na definição padrão da linguagem C. Essa primeira versão ficou conhecida como K&R C (dos sobrenomes de seus criadores, Kernighan e Ritchie). Como a linguagem C ganhou popularidade e adquiriu maturidade, o American National Standards Institute (ANSI) criou, em 1983, um comitê para estabelecer um padrão, concluído em 1989 e denominado ANSI C. Após a publicação desse padrão, o K&R C ficou conhecido como C

(3)

Histórico e características de C++

A exemplo da linguagem C, C++ também foi desenvolvida nos Laboratórios Bell, por Bjarne Stroustrup no início da década de 1980, com a primeira versão liberada em 1985. C++ baseia- se na linguagem C, a qual Stroustrup adicionou características de orientação a objetos, herdadas da linguagem Simula 67. Assim, excluindo-se detalhes, C torna-se um subconjunto de C++. Isso quer dizer que, um programa C é também um programa C++.

C++

C

Como C++ tornou-se rapidamente uma linguagem de larga utilização, em 1990, o ANSI criou um comitê, chamado ANSI X3J16, cujo objetivo era desenvolver um padrão para C++. Logo, a International Organization for Standardization (ISO), com um comitê próprio, chamado ISO-WG-21, uniu-se ao ANSI com o mesmo objetivo. Essa união é conhecida como comitê ANSI/ISO. Desde 1990, esse comitê tem publicado documentos, chamados Committee Draft (CD), referentes à padronização. Em abril de 1995, foi liberado o primeiro documento. Em dezembro de 1996, foi liberado o segundo documento, que introduziu recursos, como exceções, templates e a STL (Standard Template Library). O padrão internacional final, denominado ISO/IEC 14882:1998, foi adotado em 1998 pela ISO, pelo International Electrotechnical Committee (IEC) e pelo ANSI.

C++ é uma linguagem de propósitos gerais com uma tendência para a programação de sistemas, que suporta programação de baixo-nível nos moldes tradicionais, abstração de dados e orientação a objetos. C++ apresenta vantagens em relação à linguagem C, tais como verificação de tipos e modularização, contendo ainda melhorias que incluem constantes simbólicas, funções inline, argumentos-default para funções, sobrecarga de funções, operadores de gerenciamento de armazenagem livre (free store), referência e programação genérica.

Embora C++ utilize a biblioteca-padrão de C (definida pelo padrão ANSI C), conta com uma biblioteca mais específica, a biblioteca-padrão de classes.

O nome C++ tem origem no operador de incremento (++) da linguagem C, que adiciona 1 ao valor de uma variável. C++, então, sugere uma versão aumentada de C.

(4)

Estrutura de um programa C++

A estrutura básica de um programa C++ é simples:

#include < ... >

using namespace ...;

tipo main() {

comandos;

}

Observações:

n #include faz referência a um arquivo-cabeçalho;

n using namespace refere-se à utilização de um namespace;

n tipo indica o tipo de valor a ser retornado pela função main();

n main() é uma função obrigatória em programas C++. Todo programa tem sua execução iniciada por ela independente da sua localização, porque main() não precisa ser a pri- meira função de um programa;

n { e } indicam, o início e o fim da função main(). A seguir, um exemplo de programa C++.

// primeiro.cpp

#include <iostream>

using namespace std;

int main() {

// Exibe uma frase na tela

cout << “Meu Primeiro Programa C++. O inesquecível!\n”;

return 0;

}

Esse programa, embora completo, não pode ser executado. É preciso passar pelas fases de compilação e link-edição para que se torne um programa executável.

n No ambiente djgpp, digite:

gcc -c primeiro.cpp

e em seguida,

gxx -o primeiro.exe primeiro.o

No ambiente Linux, digite

g++ primeiro.cpp -o primeiro

Para executá-lo, digite

primeiro

(5)

Observações:

n Na linha #include <iostream>, iostream é um arquivo-cabeçalho.

n Na linha using namespace std;, std é um namespace.

n Na linha int main(), int é o tipo do valor a ser retornado pela função main(). É obrigató- rio.

n A linha // Exibe uma frase na tela é um comentário. Um comentário é identificado pelos caracteres // e é ignorado pelo compilador. Pode ser escrito após um comando.

n cout é um objeto de C++ que exibe informações na saída-padrão do sistema operacional (normalmente, o monitor).

n A linha return 0; encerra a execução da função main() com o valor de retorno 0. O comando return é necessário porque o valor de retorno é obrigatório.

n As linhas de comandos terminam com o caractere ; (ponto-e-vírgula).

Mais informações sobre criação, compilação e link-edição de programas C++ são encontradas nos itens Etapas para a criação de um programa e Como compilar e linkar programas, págs. 19 e 20.

Arquivos-cabeçalho

São arquivos que contêm protótipos de funções, definições de macros, declarações de tipos, de estruturas, de classes e de constantes, necessários às funções da biblioteca de C++.

Os arquivos-cabeçalho são processados em uma fase anterior à compilação chamada pré- processamento. São indicados no início do programa-fonte pela palavra-chave #include, denominada diretiva. Essa diretiva inclui no programa-fonte o arquivo-cabeçalho especificado. Um programa poderá conter quantos arquivos-cabeçalho forem necessários.

Um programador poderá criar seus arquivos-cabeçalho.

A diretiva #include possui dois formatos:

Formato Significado

#include <xxx> O arquivo-cabeçalho xxx será procurado no diretório-padrão de arquivos-cabeçalho.

#include "xxx" O arquivo-cabeçalho xxx será procurado no diretório corrente, e se não for encontrado, no diretório-padrão de arquivos-cabeçalho.

Nomes de arquivos-cabeçalho

Os compiladores C++ possuem vários arquivos-cabeçalho, cada um com sua finalidade. A utilização desses arquivos tem origem na linguagem C. Inicialmente, C++ seguiu o mesmo caminho trazendo, por exemplo, o arquivo-cabeçalho iostream.h. Num processo natural de

(6)

Os arquivos-cabeçalho da linguagem C, que foram convertidos para utilização com C++, receberam o prefixo c em seus nomes, por exemplo, ctype.h passou a se chamar cctype. Os arquivos-cabeçalho de C++ perderam o .h, mas incorporaram um novo conceito: namespace.

Arquivo-cabeçalho Extensão Exemplo Programas que utilizam

C .h ctype.h C/C++

C++ (padrão antigo) .h iostream.h C++

C++ (novo padrão) Não há iostream C++ com namespace

Convertido Não há cctype (prefixo c) C++

Namespaces: uma introdução

Imagine duas caixas de ferramentas (caixa 1 e caixa 2), cada uma com as seguintes ferramentas:

martelo e alicate. Alguém diz: “Pegue o martelo”. E daí a pergunta: “O martelo da caixa 1 ou da caixa 2?”, pois existem ferramentas iguais em caixas de ferramentas diferentes. Nota-se que é preciso uma forma para identificar as ferramentas de cada uma das caixas. Assim, o pedido poderia ser feito da seguinte forma: “Pegue o martelo da caixa 1” ou “Pegue o martelo da caixa 2”. De forma escrita, poderia ser criada uma convenção que implicasse o seguinte:

o nome de “quem contém” seguido do nome de “quem está contido”, então, caixa1::martelo e caixa2::martelo. Situação semelhante ocorre em programas C++, não com martelos e alicates, mas com nomes de funções, variáveis, estruturas e classes.

Em uma situação real, softwares adquiridos de fontes diferentes poderão conter, embora não propositalmente, variáveis, funções, estruturas e classes com os mesmos nomes, que na tentativa de sua utilização, levaria a erros na compilação, pois o compilador não saberia qual delas utilizar. A utilização de namespaces elimina o conflito entre nomes (identificadores) iguais, permitindo que sejam utilizados em harmonia. Para ilustrar, suponha que uma mesma função, chamada calcular, conste de dois pacotes de software de empresas distintas e que cada pacote contenha o seu namespace: calc1 e calc2. Então para utilizar a função calcular, serão necessárias as notações

calc1::calcular(valor1); e calc2::calcular(valor3);

para individualizar cada uma das funções.

Namespace é o escopo onde um identificador deve ser único. Soluciona o problema de conflito de nomes iguais.

O namespace std

Nos vários arquivos-cabeçalho, há o namespace std, onde estão definidos os vários elementos que estão sob esse namespace, como por exemplo, os objetos cin e cout.

O programa seguinte mostra a utilização do namespace predefinido std. No caso, todos os

(7)

int main() {

int idade;

cout << “Digite a sua idade: “;

cin >> idade;

cout << “Você tem “ << idade << “ anos de idade” << “\n”;

return 0;

}

: Resultado da execução do programa

Digite a sua idade: 29 Você tem 29 anos de idade

Mais informações sobre namespaces são encontradas no Capítulo 6 – Classes de memória e namespaces.

Etapas para a criação de um programa

Um programa C++, como o do exemplo anterior, é denominado programa-fonte (extensão .cpp), que não pode ser executado pelo computador. Com o programa-fonte concluído, serão necessárias duas etapas para que o mesmo torne-se um programa executável:

n Compilação: execução de um programa (o compilador) para traduzir o programa-fonte na chamada “linguagem de máquina”. O programa resultante é denominado programa- objeto (extensão .o).

n Link-edição: execução de um programa (o linker) para ligar ao programa-objeto, código- objeto de funções utilizadas e rotinas-padrão de inicialização. O programa resultante é denominado programa executável. É possível também linkar vários programas-objeto para criar um único programa executável, em aplicações multiprograma. Graficamente:

Programa-fonte

Compilador

Programa-objeto

Linker

Código-objeto de funções Rotinas-padrão

(8)

Como compilar e linkar programas

Compilação e link-edição constituem duas etapas distintas. Para tanto, é necessário executar o compilador e em seguida, o linker.

Compilação de um único programa

Supondo o programa-fonte namspa01.cpp, do exemplo anterior.

n No ambiente djgpp Para compilar, digite:

gcc -c namspa01.cpp

Não havendo erros no programa namspa01.cpp, será criado o programa-objeto namspa01.o. Para linkar, digite:

gxx -o namspa01.exe namspa01.o

Será criado o programa executável namspa01.exe.

n No ambiente Linux

Para compilar e linkar, digite:

g++ namspa01.cpp -o namspa01

Será criado o programa executável namspa01.

Compilação de vários programas

Supondo os programas-fonte prog01.cpp e prog02.cpp.

n No ambiente djgpp Para compilar, digite:

gcc -c prog01.cpp prog02.cpp

Não havendo erros nos programas prog01.cpp e prog02.cpp, serão criados os progra- mas-objeto prog01.o e prog02.o.

Para linkar, digite:

gxx -o prog99.exe prog01.o prog02.o

Será criado o programa executável prog99.exe.

n No ambiente Linux

Para compilar e linkar, digite:

g++ prog01.cpp prog02.cpp -o prog99

Será criado o programa executável prog99.

Automatizando a compilação e a link-edição de programas

No ambiente djgpp, para evitar a digitação das duas linhas, é possível criar um arquivo .bat para automatizar a compilação e a link-edição.

(9)

Crie um arquivo-texto chamado, por exemplo, cl.bat com o o seguinte conteúdo:

CLS

gcc -c %1.cpp

IF NOT EXIST %1.o GOTO fim gxx -o %1.exe %1.o

:fim

Para compilar e linkar seus programas, digite cl e o nome do programa-fonte, sem a extensão, pois já está no arquivo cl.bat:

cl prog01

Teste seus conhecimentos

1. Escreva “F” para sentenças falsas e “V” para sentenças verdadeiras.

1. A linguagem C foi desenvolvida nos laboratórios da Hewlett-Packard (HP). (   )

2. A primeira versão da linguagem C também é conhecida como K&R C. (   )

3. A linguagem C++ foi desenvolvida nos Laboratórios Bell, por Bjarne Stroustrup. (   )

4. ANSI C é a denominação dada à linguagem C após a sua padronização pelo ANSI. (   )

5. Com a criação de C++, a linguagem C torna-se um subconjunto de C++. (   )

6. A função main() é opcional em programas C++. (   )

7. #include é uma diretiva utilizada na fase de pré-processamento. (   )

8. O uso de namespaces permite que identificadores iguais sejam utilizados sem conflitos. (   )

9. Os arquivos-cabeçalho são processados na fase de pré-processamento. (   )

10. Para que um programa C++ possa ser executado, precisa passar pelas fases de link-edição e compilação. (   )

11. Um programa C++ escrito pelo programador é denominado programa-objeto. (   )

Referências

Documentos relacionados

Na Sub-função NeTI pode-se selecionar a quantidade de etiquetas a serem impressas, como padrão de fábrica o indicador vai programado para imprimir 1 etiqueta, caso

Para se alcançar aos objetivos propostos, foi realizada pesquisa bibliográfica sobre os principais temas, como: reforma agrária, a região do Brejo Paraibano, a produção de

mítico fundador do Clube de Cinema de Santos. Imagens escrachadas do que seria o dia-a-dia de Legeard – perambulando pelas ruas de Santos, pesquisando arquivos sobre

De quantas maneiras podemos escrever um string usando letras do alfabeto {A, B, C, D}, tais que cada letra é usada exatamente duas vezes mas não aparece consecutivamente no string?.

Para o treinamento do clas- sificador de Bayes presente no método wrapper utiliza-se a porção dos dados definida como conjunto de treinamento, um conjunto de validação deve ser

Marc Sprenger, antigo presidente do Conselho de Administração, Zsuzsanna Jakab, directora do ECDC, e Miroslav Ouzký, deputado ao Parlamento Europeu, na inauguração do Centro

A prevalência global de enteroparasitoses foi de 36,6% (34 crianças com resultado positivo para um ou mais parasitos), ocorrendo quatro casos de biparasitismo, sendo que ,em

O Workshop de Sensibilização foi realizado nos dias 22 e 23 de Agosto de 2003, no hotel Pergamont com representantes da Secretaria de Governo Municipal - SGM e a Secretaria