Escolar Documentos
Profissional Documentos
Cultura Documentos
Conhecendo o C++
Orientado a Objetos
1
CONCEITOS BÁSICOS DA
LINGUAGEM C++
Olá!
#include <iostream.h>
void main( )
{
cout << “Primeiro Programa”;
}
IMPORTANTE:
Exercícios
A INSTRUÇÃO COUT
Alô Mundo!
Mensagem Impressa
#include "iostream.h"
void main ( )
{
cout << "Tenho” << 35 << “anos de idade";
}
CARACTERES ESPECIAIS
\n NOVA LINHA
\t TAB
\b RETROCESSO
\" ASPAS
\\ BARRA INVERSA
\0 NULO
\a Beep do auto-falante
#include “iostream.h”
void main( )
{
cout << “São Pedro da Aldeia está a aproximadamente “ <<
200 << “ km do” << ‘\n’ << “centro do Rio de Janeiro” << “\n”;
}
Exercícios
Exemplos:
nome, idade, altura, endereço, data_nasc, salário, cargo etc.
Com exceção do tipo void, os demais tipos podem vir acompanhados por
modificadores do tipo short, long e unsigned, no momento de sua declaração.
unsigned 16 2 0 a 65535
VARIÁVEL INTEIRA
/* Exemplo Prático */
#include <iostream.h>
void main ( )
{
int num;
num = 2;
cout << "Este é o numero dois: " << num;
}
Outro exemplo:
#include <iostream.h>
void main ( )
{
int num1,num2=4;
num1 = num2;
cout << num1 << ‘\n’ << num2;
}
char if sizeof
do _near this
VARIÁVEL REAL
void main ( )
{
float n1, n2;
n1=6;
n2=5.5;
cout << "A soma de “ << n1 << “ com “ << n2 << “ é igual a "
<< n1+n2;
}
Caso você queira usar uma variável real de precisão dupla, ou seja, aquela
que ocupa 8 bytes ao invés de 4, utiliza-se em C++ a palavra reservada double no
lugar de float.
num = 59;
result = 3.1415 * num;
VARIÁVEL CARACTER
/* Exemplo Prático */
#include "iostream.h"
void main ( )
{
char letra='a';
char nomedoaluno[35];
IMPORTANTE:
É verdadeiro afirmar que uma variável “STRING” é visto como um
vetor de caracteres, pela linguagem C++.
Uma variável local é aquela declarada dentro do corpo de uma certa função
e somente pode ser utilizada por aquela função e nenhuma outra mais. Já uma
variável global, que poderá ser utilizada por todas as funções existentes em seu
programa, é declarada fora, antes, do início do corpo da função principal do
programa, main( ).
void main( )
{
float num1=5, num2=3, result;
clrscr( );
gotoxy(10,10);
cout << “Resultado = ” << result;
}
Aqui foi criada uma constante chamada DOIS para representar o numeral
2. Na verdade, a criação de constantes não é feita para ser usada de forma ao acaso
pois, tudo aquilo que você cria dentro do seu programa, a final de contas, ocupa
espaço físico na memória do computador.
Ainda, utilizamos a biblioteca conio.h que permite a inserção de instruções
de entrada e saída ligadas ao console. Por meio dessa biblioteca, neste programa
exemplo, utilizamos duas instruções a serem consideradas. A primeira clrscr( )
serve para limpar a tela do computador. A segunda, gotoxy( COL, LIN ) determina
em que ponto da tela, dado por um número de coluna e linha, o cursor será
posicionado.
Outro Exemplo:
#include <iostream.h>
void main( )
{
const float PI = 3.1415;
#include <iostream.h>
#include <conio.h>
void main( )
{
clrscr( );
cout << “Comunico a quem interessar que os laboratórios de informática”
<< ‘\n’ << “ncontram-se em manutenção.” << ‘\n’
cout << “ Assinado: “ << EU;
}
MANIPULADORES DE IMPRESSÃO
#include <iostream.h>
#include <iomanip.h>
void main( )
{
int qtd1, qtd2, qtd3, qtd4;
qtd1=98;
qtd2=178;
qtd3=1028;
qtd4=214;
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
void main( )
{
val1=1.50;
val2=3.55;
val3=2.20;
val4=2.85;
val5=0.99;
clrscr( );
getch( );
}
Exercícios
1- Para que utilizamos uma variável?
2- Cite três nomes de variáveis válidas.
3- Diferencie Variável Local e Variável Global.
4- Como declarar uma variável do tipo real de precisão dupla?
5- Quais as formas de declaração de uma constante num programa em C++?
6- Quais são os tipos primitivos de variáveis?
7- Diferencie variável real de precisão simples e real de precisão dupla.
8- Uma variável String em C++ é interpretada por um conjunto de caracteres.
Verdadeiro ou Falso?
9- Quais os respectivos tamanhos em bytes da variável real de precisão
simples e da variável real de precisão dupla?
10- Qual a função da biblioteca conio.h?
11- O que faz a instrução clrscr( )?
12- Explique com suas palavras a linha de comando gotoxy(25, 6).
13- Qual a função dos modificadores de variáveis?
14- O que são os manipuladores de impressão?
15- Onde estão armazenados os manipuladores de impressão?
4
ENTRADA DE DADOS
A INSTRUÇÃO CIN
#include "iostream.h"
void main ( )
{
int a, b, soma;
void main ( )
{
#include <iostream.h>
void main ( )
{
char nome[30];
cout << "Como vai voce " << ‘\n’ << nome;
}
Você precisa saber que existem outras funções de entrada de dados que
podem ser utilizadas na linguagem C++, conforme podemos ver a seguir.
Essa função processa tudo que foi digitado até que a tecla ENTER seja
pressionada. O caracter ENTER não é acrescentado à string mas sim identificada
como término da mesma.
#include <iostream.h>
#include <conio.h>
void main ( )
{
char nome[30];
clrscr( );
cout << "\nComo vai voce " << ‘\n’ << nome;
}
FUNÇÃO getchar( )
Toda vez que desejarmos efetuar uma ação de entrada de dados para
apenas um caracter, devemos utilizar a função getchar( ). Sempre que uma letra for
digitada através dessa função, há necessidade do pressionamento da tecla ENTER
para concluir tal leitura.
#include <iostream.h>
#include <conio.h>
void main ( )
{
char letra;
clrscr( );
FUNÇÃO getche( )
#include <iostream.h>
#include <conio.h>
char letra;
void main ( )
{
clrscr( );
Note que a variável letra foi declarada como global por estar fisicamente
fora do corpo principal do programa.
FUNÇÃO getch( )
/* Programa exemplo */
#include <iostream.h>
#include <conio.h>
void main ( )
{
char ch;
clrscr( );
cout << "Digite uma tecla:";
ch = getch( );
clrscr( );
cout << ‘\n’ << “A tecla que você pressionou foi " << ch;
Exercícios
ARITMÉTICOS
Símbolos Operadores
* Multiplicação
/ Divisão
% Módulo (resto)
+ Adição
- Subtração
++ Incremento
-- Decremento
OPERADORES DE INCREMENTO
Parece ser bem complicado, à primeira vista, mas não é nenhum bicho de
sete cabeças. Incrementar uma variável significa na íntegra que estamos
adicionando um valor a ela, ou seja, somar valores a uma variável em questão.
Veja:
i = i + 1; i ++; ++ i;
PÓS-INCREMENTO E PRÉ-INCREMENTO
Veja:
i = i – 1; i --; -- i;
PÓS-DECREMENTO E PRÉ-DECREMENTO
Operador Função
&& E lógico
|| Ou lógico
! Não lógico
RELACIONAIS
Símbolos Significado
== Igualdade
!= Diferença
= Atribuição simples
Também, assim como nas linguagm C, o C++ permite manipular
os chamados operadores de atribuição composta. Veja o exemplo:
a += b; que verdadeiramente significa a mesma coisa que a = a +
b. Veja outro exemplo, c *= a; que significa c = c * a.
Entendeu?
Modelos:
if(Not(sexo==´F´))
cout << “MASCULINO”;
#include <iostream.h>
#include <conio.h>
void main( )
{
int a,
b,
max;
clrscr( );
cout << "Digite dois numeros:";
cin >> a.;
cin >> b;
max = ( a > b ) ? a : b;
cout << "O maior deles e " << max;
}
Observe a seguir que ainda, podemos fazer uma representação bem melhor
desse comando:
#include <iostream.h>
#include <conio.h>
void main ( )
{
int a,
b;
clrscr ( );
cout << "Digite dois numeros:”;
cin >> a >> b;
cout << "O maior deles e " << ((a > b) ? a : b);
}
A forma pela qual você irá trabalhar com o operador condicional ternário,
na verdade, não importa muito pois, ao utilizá-lo, você estará eliminando, por
exemplo, o uso da função condicional if( ), que iremos abordar no próximo
capítulo.
if( a > b )
Cout << “O maior deles e “ << a;
else
cout << “O maior deles e ” << b;
Você poderá ainda ter uma estrutura ternária encadeada a outra estrutura
ternária assim como também pode acontecer com a estrutura condicional ninho de
if´s. Veja a seguir:
#include <iostream.h>
#include <conio.h>
void main ( )
{
int a,
b,
val;
clrscr( );
cout << "Digite dois numeros:";
cin >> a;
cin >> b;
val = ( a == b ) ? a+b : ( a > b) ? a : b;
cout << "O maior deles e " << val;
}
Parênteses e Funções
1º
Sinais unários
2º
Exponenciação
3º
Divisão e Multiplicação
4º
Adição e Subtração
5º
Operadores Relacionais
6º
NÃO
7º
E
8º
OU
9º
Exercícios
#include <iostream.h>
void main( )
{
cout << “Entre com um número:”;
int num;
cin >> num;
if(num > 0)
cout << “\nNum é maior que ZERO”;
}
No exemplo, se o valor da variável num for maior do que zero, será
impressa a mensagem “Num é maior que ZERO”.
#include <iostream.h>
void main( )
{
cout << “Entre com um número:”;
int num;
cin >> num;
if(num > 0)
cout << “\nNum é maior que ZERO”;
else
cout << “\nNum não é maior que ZERO”;
}
ENCADEAMENTO DE if´s
#include <iostream.h>
void main( )
{
cout << “Entre com um número:”;
int num;
cin >> num;
if(num == 0)
cout << “\nNúmero igual a ZERO”;
else
if(num > 0)
cout << “\nNúmero Positivo”;
else
cout << “\nNúmero Negativo!”;
}
#include <iostream.h>
include <conio.h>
void main( )
{
int num;
clrscr( );
cout << “Digite ou numero 1, 2 ou 3:”;
cin >> num;
switch(num)
{
case 1 :
cout << “Numero Um”;
break;
case 2 :
cout << “Numero Dois”;
break;
case 3 :
cout << “Numero Tres”;
break;
default :
cout << “Numero Incorreto...”;
}
}
Observação:
1- A expressão é avaliada.
IMPORTANTE:
if((n1 > n2) && ((n1 > n3) || (n4 > n2)))
cout << “A L E R T A ! ! !”;
else
cout << “Z O N A S E G U R A !”;
Atividade Prática 2
Escreva um programa na linguagem de programação C++ que permita ao
usuário ler três números distintos pelo teclado listando, ao final do programa, qual
o maior, menor e o mediano deles.
Atividade Prática 3
Faça um programa em C++ que permita ao usuário ler uma letra qualquer
através do teclado. No final do processamento, o programa deverá informar se a
letra digitada é uma vogal ou uma consoante.
Atividade Prática 4
Escreva um programa em C++ que leia um número informando ao final do
processamento se esse número é primo ou não.
Atividade Prática 5
Em C++, desenvolva um programa de computador que leia dois números
inteiros. Realize o seguinte processamento: Calcular o quadrado do primeiro
número pelo segundo número e também, o cubo do segundo número pelo primeiro.
Isso só será feito apenas se os dois números fornecidos derem suporte para
realização desse tipo de operação.
Exercícios
São utilizadas para que uma parte de seu programa possa ser repetida n
vezes sem a necessidade de reescrevê-lo. Essas estruturas também são conhecidas
como LOOP ou laços.
LOOP for
Outro Exemplo:
Bloco de
#include <iostream.h> Comandos
void main( )
{
int x;
#include <iostream.h>
void main( )
{
int x, y;
for(x=1; x<=3; x++)
for(y=1; y<3; y++)
cout << (x + y);
}
Outro Exemplo:
#include <iostream.h>
Veja mais um
void main( )
exemplo
{ prático.
int x;
double a, b;
LOOP while
É o mais genérico dos três e pode ser usado para substituir os outros dois;
em outras palavras, o laço while supre todas as necessidades. Já os outros dois, são
usados por uma questão de comodidade. Vamos analisar o exemplo a seguir:
#include <iostream.h>
#include <conio.h>
void main( )
{
int x=0;
while(x<10)
{
#include <iostream.h>
void main( )
{
int x=0;
do
{
Exercícios
1- Qual o uso prático das estruturas de iteração?
2- Qual a diferença básica em utilizar a estrutura de
repetição repita...até e enquanto...faça?
3- Exemplifique o uso da estrutura para...variando com um contador
incrementado.
4- Escreva um programa em C++ que escreva todos os números pares
compreendidos na seguinte seqüência: 20 até 41. Para tal, utilize a
estrutura de repetição...
a. Para...variando
b. Repita...até
c. Enquanto...faça
clrscr( );
cout << “Entre com a temperatura em graus Fahrenheit:”;
cin >> f;
#include <iostream.h>
#include <conio.h>
clrscr( );
cout << “Entre com a temperatura em graus Fahrenheit:”;
cin >> f;
getch( );
}
Aqui, literalmente, a função cria cópia dos valores que são passados pelos
parâmetros transmitidos originalmente. Assim, não altera os valores originais das
variáveis (são mantidos íntegros). Observe a seguir:
#include <iostream.h>
#include <iostream.h>
#include <iostream.h>
while ( 1 )
{
cout << “Entre com um número:”;
cin >> num;
if ( num > 0 )
break; // Ocorre Quando Número Negativo
}
}
Exercícios
1- Para que servem as funções?
2- O que é uma função recursiva?
3- Escreva um programa em C++ que permita ao usuário ler dados suficientes
pelo teclado para calcular e imprimir a área de um triângulo qualquer.
Sabe-se que o cálculo da área do triangulo deverá ser feito através da
função chamada calcula( ).
4- Qual a diferença existente entre um programa com função que utilize
passagem de parâmetro por valor e outro que utilize passagem de
parâmetro por referência?
5- Faça uma pesquisa e escreva um programa em C++ que utilize a técnica de
função recursiva.
6- Recursividade é o mesmo que função recursiva? Justifique sua resposta.
9
VETORES E MATRIZES
void main( )
{
int contador,
idade[5];
float altura[5];
char nome[5][30]; // Declaração de uma String
// dúvidas rever capítulo 3
char sexo[5];
clrscr( );
Índice do Vetor
cout << “\nEntre com o nome:”;
cin >> nome[contador];
char nome[40][35];
float media[40];
cont = 0;
cont++;
}
Aluno...........
Nota1...........
Nota2...........
Nota3...........
Nota4...........
Diagonal Principal
void main( )
{
int lin, col,
mat[3][3];
getch( );
}
Exercícios
Tópicos Avançados
em C++
10
ESTRUTURAS E UNIÕES
ESTRUTURA SIMPLES
getch( );
}
ESTRUTURA COMPOSTA
clrscr( );
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
#include <stdlib.h>
#include <stdio.h>
struct data {
int dia;
char mes[10];
int ano;
};
struct venda {
data diavenda;
int pecas;
float preco;
};
venda vendas[50];
venda total = {{0, “ “, 0}, 0, 0.0};
int n=0;
/* Função Principal do Programa */
void main( )
{
const char ESC=27;
char ch;
while ( 1 )
{
clrscr( );
ch = getch( );
switch (ch)
{
case ‘A’ : novavenda( );
break;
case ‘L’ : listavenda( );
break;
case ESC : exit ( 0 );
default : cout << “\nOpção Inválida”;
}
}
}
/* Função Nova Venda */
void novavenda( )
{
char aux[80];
total.pecas += vendas[n].pecas;
total.preco += vendas[n++].preço;
}
void listavenda( )
{
int i=0;
if (!n)
{
cout << “\nNão há peças vendidas”;
return;
}
UNIÃO SIMPLES
/* Exemplo Prático */
#include <iostream.h>
#include <conio.h>
union
{
int num1, num2;
float num3, num4;
} exemp; // aqui é definida a variável união
void main( )
{
exemp.num1 = 2;
exemp.num2 = 3;
exemp.num3 = 5.5;
exemp.num4 = 9.8;
getch( );
}
UNIÃO COMPOSTA
/* Exemplo Prático */
#include <iostream.h>
#include <conio.h>
struct alfa
{
int n1, n2;
};
struct gama
{
float n3, n4;
};
union
{
struct alfa
a;
struct gama
g;
} omega; // variável união que representa o conjunto das
// estruturas aqui apresentadas
void main( )
{
clrscr( );
omega.a.n1 = 2;
omega.a.n2 = 3;
omega.g.n3 = 1.5;
omega.g.n4 = 2.5;
cout << “n1 = ” << omega.a.n1 << “\n\n” << “ n2 = “ << omega.a.n2;
cout << “\n\n” << “n3 = ” << omega.g.n3 << “\n\n”
<< “ n4 = “ << omega.g.n4;
getch( );
}
Exercícios
FUNCIONARIO
MATRÍCULA
NOME
DATA_DE_NASCIMENTO
DIA
MÊS
ANO
CARGO
SALÁRIO
2- Faça um rpograma em C++ que permita ao usuário criar e preencher a
seguinte estrutura abaixo:
CONTRATADO
IDENTIDADE
CPF
NOME
DATA_DE_NASCIMENTO
DIA
MÊS
ANO
PROFISSÃO
REMUNERAÇÃO
3- Escreva um programa em C++ que crie uma união capaz de juntar as duas
estruturas desenvolvidas nos exercícios 1 e 2 anteriores.
4- Imagine uma situação em que você tenha que desenvolver um programa
para controle de uma academia de ginástica. Então, escreva em linguagem
C++ um programa que seja capaz de criar uma estrutura para tal
manipulação de dados. (Os dados cadastrais referentes a definição da
estrutura, fica a cargo do programador).
11
PONTEIROS OU APONTADORES
58
O endereço B tem
como conteúdo o
Como o endereço de C aponta endereço de A
para o endereço de B que referencia
o conteúdo do endereço de A, portanto
o conteúdo armazenado no endereço C será igual ao
endereço da variável A cujo valor armazenado em seu conteúdo é 58;
Portanto, o valor apontado pela variável C será o conteúdo da variável A, ou seja,
58
Como o endereço de C aponta para o endereço da variável B que referencia o
conteúdo do endereço de A, é verdadeiro afirmar que o conteúdo armazenado no
endereço de C será igual ao endereço da variável A, cujo valor armazenado é igual
a 58. Portanto, o valor apontado pela variável C será igual a 58, pois, o conteúdo da
variável A é igual a 58.
Observe atentamente o programa exemplo escrito em C++ abaixo:
void main ( )
{
int
a,
*b, *c; // representação de uma variável ponteiro
b = &a;
*b = 58;
c = b;
clrscr( );
cout << "Endereco de a: " << &a << “\n”;
cout << "Conteudo de a: " << a << “\n”;
cout << "Conteudo de b: " << b << “\n”;
cout << "Valor apontado por b: “ << *b << “\n”;
cout << "Endereco de b: " << &b << “\n”;
cout << "Conteudo de c: " << c << “\n”;
cout << "Valor apontado por c: " << *c << “\n”;
cout << "Endereco de c: " << &c << “\n”;
getch( );
}
Endereço de a = 65494
Conteúdo de a = 58
Conteúdo de b = 65494
Valor apontado por b = 58
Endereço de b = 65496
Conteúdo de c= 65494
Valor apontado por c= 58
Endereço de c= 65498
Saída do Programa
ALOCAÇÃO DINÂMICA
/* Alocação Dinâmica */
#include <iostream.h>
#include <alloc.h>
void main ( )
{
int
*ptr;
Para que possamos entender a instrução ptr = ( int * ) malloc( sizeof( int ))
vamos dividi-la em partes:
pt = new int;
clrscr( );
delete pt;
}
Sempre que alocada (new), a memória continuará ocupada até que seja
efetivamente desalocada. Para isto, utilizaremos o operador especial delete, ou
seja, uma variável criada pelo operador new continuará existindo até que ela seja
destruída pelo operador delete.
/* Programa Exemplo */
#include <iostream.h>
#include <conio.h>
void main ( )
{
int vetor[3],
*p1, *p2;
p1 = vetor;
p2 = &vetor[2];
*p1 = 0;
*(p1 + 1) = 1;
*( p1 + 2) = 2;
getch( );
}
#define MAX 5
void main ( )
{
int d;
int entra = 0;
char nome[40];
static char *list[MAX] =
{ "Karine",
"Richard",
"Ronaldo",
"Juan",
"Giullia" };
clrscr( );
VARIAÇÕES SIGNIFICADOS
strcpy(STRING1, STRING2);
strcpy(endereço, “Rua Alfa 32”);
char string1[80];
void main( )
{
Caract1
char string2[80],
Caract2
caract1,
caract2;
clrscr( );
if(strcmp(s1, s2)==0)
return(0);
else{
for(i=0; i<sizeof(string1); i++)
if(s1[i]==c1)
{
s1[i]=c2;
n++;
}
return(n);
}
}
/* Exemplo Prático */
#include <iostream.h>
#include <conio.h>
#include <string.h>
void main( )
{
char string1[80],
string2[80],
velha[80],
nova[80];
int idade1,
idade2;
clrscr( );
if(idade1==idade2)
cout << “\n\n” << “As pessoas têm a mesma idade...”;
else{
if(idade1>idade2)
{
strcpy(maior, string1);
strcpy(menor, string2);
}
else{
strcpy(maior, string2);
strcpy(menor, string1);
}
}
clrscr( );
Exercícios
1- O que você entende por alocação dinâmica?
2- Defina variáveis apontadoras.
3- Qual o objetivo da função strcmp( )?
4- Diferencie strcmp( ) e strcpy( ).
5- Na aritmética com ponteiros posso efetuar operações com tipos de
variáveis diferentes (que não tenham o mesmo tipo)? Justifique sua
resposta.
6- Numa alocação dinâmica posso usar vetor de diferentes tipos? Justifique
sua resposta.
7- Escreva um programa em linguagem C++ que permita ao usuário
armazenar em uma variável ponteiro valores de forma indireta, ou seja, o
conteúdo armazenado deserá ser feito a partir de outra variável, também
ponteiro do mesmo tipo.
8- Explique com suas palavras para que serve a função malloc( )?
12
PROGRAMANDO C++
ORIENTADO A OBJETOS
Olá!
Olha só, essa placa que estou segurando. Em
C++, ela é chamada tecnicamente de objeto,
pois ela representa uma entidade que existe no
chamado mundo real (nosso mundo).
Entendeu??
Objeto
Talvez você não tenha entendido muito bem o que o nosso amiguinho
Ronald quis dizer ao referenciar a placa que está segurando como um objeto. Mas
não se preocupe com isso agora, pois para uma melhor compreensão de tudo aquilo
que iremos aprender nesse livro, através da linguagem de programação C++,
vamos estudar os conceitos básicos da orientação a objetos.
CONCEITOS BÁSICOS
OBJETOS
Analise que cada um dos objetos citados ateriormente apresenta suas
próprias características (propriedades) e seu próprio comportamento (método) que
é diferente dos demais objetos apresentados, pois cada objeto é um objeto é dito
unívoco.
#include <iostream.h>
class Retangulo // Define uma classe de nome Retangulo
{
private:
int base, altura;
public:
void init (int bas, int alt)
{
base = bas;
altura = alt;
}
void mostrarea( )
{
cout << “\nBase = “ << base << “ Altura = “ << altura;
cout << “\nÁrea = “ << (base * altura);
}
};
/* Corpo Principal do Programa */
void main( )
{
Retangulo x, y;
x.init(5,3);
y.init(10,6);
x.mostrarea( );
y.mostrarea( );
}
Em Orientação a Objetos,
o que é, realmente, a
chamada UML?
INTRODUÇÃO À UML
PRINCÍPIOS DA UML
NOTAÇÃO UML
¾Diagrama de Objetos
¾Diagramas de Seqüência
¾Diagrama de Colaboração
¾Diagrama de Estado
¾Diagrama de Atividade
¾Diagrama de Componentes
¾Diagrama de Implantação
CONSTRUTORES EM C++
class data
{
private :
int dia,
Objeto data
mes,
ano;
public :
int bissexto( )
{
return ((ano % 4 == 0) && (ano % 100) || (ano % 400) ==0);
}
data (int d, int m, int a); // Construtor em C++
/* Definição do Construtor */
data ::data(int d, int m, int a) // Construtor sem especificação de tipo
{
initdata(d, m, a);
}
cout << “\n\n” << dia << “ de “ << nome[mes] << “ de “ << ano;
}
int sig[ ] = { 0, 20, 19, 20, 20, 20, 20, 21, 22, 22, 22, 21, 21 };
if (dia<sig[mes])
cout << “n\Signo: “ << nsigno[mes];
else
cout << “\nSigno: “ << nsigno[mes+1];
}
/* Programa Principal */
void main( )
{
data x(12, 1, 1976),
y(30, 7, 1978),
z(14, 6, 1992);
clrscr( );
getch( );
}
Note que no programa exemplo apresentado, foi criada uma classe de
nome data que serviu de base para todo e qualquer processamento decorrido nele.
A cláusula private é utilizada com o objetivo de definir as variáveis que são assim
ditas próprias da classe. Já a cláusula public é utilizada para fazer definições de
variáveis, funções que serão usadas em todo decorrer do programa. Note que
sempre que um objeto é criado seus dados-membros são inicializados
automaticamente e simultaneamente com os dados que são colocados entre
parênteses e separados por vírgula (aqueles que aparecem ao lado do nome do
objeto), no momento da declaração.
public :
venda( ); // Definição do construtor vazio
{ //Vazio
}
public :
aluno(int m, char n[35], float g)
{
matr = m;
strcpy(nome, n);
grau = g;
}
/* Função Entrada */
void entraaluno( )
{
clrscr( );
/* Função Saída */
void saialuno( ) const;
};
Al1.entraaluno( );
Al2.entraaluno( );
Al3.entraaluno( );
clrscr( );
getch( );
}
Neste caso o objeto criado aluno foi utilizado como referência para as três
variáveis existentes no programa Al1, Al2 e Al3 (representativas de três alunos de
uma certa turma).
DESTRUTORES EM C++
class carro
{
private :
int chassis;
char cor[15];
int ano;
char marca[20];
Construtor
float valor;
public :
carro(int ch, char co[15], int an, char ma[20], float va)
{
chassis = ch;
strcpy(cor, co);
ano = an;
strcpy(marca, ma);
valor = va; Destrutor
}
~carro( )
{ // vazio
}
};
Note que na definição do objeto carro(PARÂMETROS) { Definição }
tivemos a descrição do construtor carro e logo em seguida, tivemos a descrição do
destrutor ~carro( ) { Vazio }. Assim, o destrutor no exemplo apresentado é
chamado automaticamente quando se encerra o escopo dentro do qual a instância
da classe foi declarada, que é então o momento em que ela será verdadeiramente
excluída (destruída).
class pilha
{
private:
int pil[100];
int topo;
public:
pilha( ) : topo( 0 )
{ } Construtor
~pilha( )
Destrutor
{ }
clrscr( );
pilha1.poe(10);
pilha1.poe(20);
pilha1.poe(30);
pilha2 = pilha1;
return 0;
}
~List( )
{ }
int Cheio( )
{
if( numList >= MAX )
return 1;
else
return 0;
}
int Vazio( )
{
if( numList == 0 )
return 1;
else
return 0;
}
int Tamanho( )
{
return numList;
}
List list;
void inseriDados( )
{
enderStruct e;
if( !list.Cheio( ) )
{
clrscr( );
list.Inseri(e);
}
else
cout “\nA lista está cheia...\n\n”;
}
void imprimeDados( )
{
int i;
enderStruct e;
for( i=0; i< list.Tamanho; i++ )
{
list.Ler(e, i);
imprimeUmRegistro(e);
}
void procuraRegistro( )
{
char str[40];
int i;
int achei=0;
enderStruct e;
if( list.Tamanho( ) == 0 )
cout << “\nLista Vazia\n\n”;
else
{
cout << “\nNome a Pesquisar: “;
cin >> str;
if( !achei )
cout << “\nRegistro Não Encontrado\n\n”;
}
}
void mostraMenu( )
{
clrscr( );
int main( )
{
char opção[10];
int aux=0;
while( !aux )
{
mostraMenu( );
cin >> opção;
switch( opção[0] )
{
case ‘1’ :
inserirDados( );
break;
case ‘2’ :
imprimeDados( );
break;
case ‘3’ :
procuraRegistro( );
break;
case ‘4’ :
aux=1;
break;
default :
cout << “Opção Inválida.\n\n”;
}
}
return 0;
}
HERANÇA EM C++
Vejamos agora um
programa exemplo que
trabalha com Herança…
Herança
class conta
{
private:
char nome[40];
int numconta;
float saldo;
public:
void entrada( )
{
clrscr( );
void saida( )
{
clrscr( );
float Saldo( )
{ return saldo; }
};
class contaSimples : public conta
{ };
void saida( );
{
conta::saida( );
cout << “\nLimite de Cheque Especial:” << limite;
cout << “\nSaldo Total:” << << setiosflags(ios::fixed)
<< setprecision(2) << (Saldo( ) + limite);
}
};
void saida( )
{
conta::saida( );
cout << “\nValor da Taxa:” << taxa;
cout << “\nSaldo Total:” << setiosflags(ios::fixed)
<< setprecision(2) << (Saldo( ) * taxa);
}
};
void main( )
{
int x;
contaSimples cli1,
cli2;
contaEspecial cli3,
cli4,
cli5;
contaPoupanca cli6;
/* Fornece com Dados dos Clientes */
for( x=0; x<=6; x++ )
{
cout << “\nForneça os dados do cliente nº “ << x+1;
clix+1.entrada( );
}
Note que a classe conta foi criada como uma classe padrão para
manipulação de conta de clientes de um certo banco. Com base nos parâmetros
definidos na classe conta, foram criadas as classes contaSimples, contaEspecial e
contaPoupanca. Isso só foi possível devido o princípio da Orientação a Objetos
conhecido como Herança onde, uma classe herda características, métodos e
propriedades, de uma determinada classe classificada como classe pai. Logo, na
verdade, a classe conta é considerada a classe Pai, aquela que dá origem a outras
classes, e as classes contaSimples, contaEspecial e contaPoupanca são
consideradas as classes Filhas, que só existem porque foram geradas com base em
outra classes qualquer.
POLIMORFISMO EM C++
Poli…
Morfismo
public:
void setJ(int new j);
void setK(int new k);
int getJ( );
int getK( );
};
class filha: // Criação da classe Filha
public pai
{
protected:
int m, n;
public:
void setM(int new m);
void setN(int new n);
int getM( );
int getN( );
};
int pai::getJ( )
{
return j;
}
int pai::getK( )
{
return k;
}
int filha::getN( )
{
return n;
}
prnt = chld;
// chld = prnt; // error
pai* pp = &chld; // Pode acessar todas as 4 variáveis
pai& rr = chld;
// child* cc = &prnt; // error
pp = &prntl;
pp = &chldl;
// Lista Heterogênea
pai* list[4];
list[0] = &prnt;
list[1] = &chld;
list[2] = &prntl;
list[3] = &chldl;
}
SOBRECARGA DE OPERADOR
class ref
{
private:
int a,
b;
public:
ref(int x=0, int y=0)
{
a=x;
b=y;
}
ref operador++( )
{
++a;
++b;
return aux;
}
/* Corpo Principal */
void main( )
{
ref ref1,
ref2(2, 3),
ref3;
ref3=++ref1;
cout << “\n ref3 = “;
ref3.imprimeref( );
}
Exercícios
1- Defina Classe.
2- O que é ou representa um objeto?
3- Defina UML.
4- Diferencie objeto e classe.
5- Qual o objetivo de utilizar a técnica de sobrecarga de operador?
6- Escreva um programa em C++, baseado em uma Vídeo Locadora, cujo
objetivo é trabalhar classes simples e classes derivadas a partir do princípio
da orientação a objetos denominado Herança.
7- O que você entende por Programação Orientada a Objetos?
8- Podemos escrever um programa em C++ baseado na orientação a objetos
para manipulação e tratamento de estruturas de dados complexas como
Lista e Pilha, por exemplo? Justifique sua resposta.
9- Defina Construtor. Exemplifique.
10- Defina Destrutor. Exemplifique.
11- Quais os princípios da Linguagem de Modelagem Unificada?
12- Escreva um programa em C++ para efetuar uma sobrecarga de operador
baseado no operador de decremento (--).
13- O que é sobre carga de operador?
14- Defina encapsulamento.
15- Exemplifique polimorfismo.
13
MANIPULANDO ARQUIVOS
Isso é
moleza!!
Arquivo
OS OBJETOS STREAM
ios
istream ostream
istream_withassign Ostream_withassign
iostream
Usamos o objeto chamado fout da classe ofstream. Com isso nós tivemos
a possibilidade de gravar caracter a caracter no arquivo denominado TESTE.TXT.
Verifique que no loop while( ) foi utilizado o caracter especial ‘\x1b’ que
representa a tecla ESC (escape). A instrução cin.get( ) realiza a leitura do caracter
digitado que será gravado através da instrução fout.put( ). Vejamos a seguir como
efetuar a leitura dos dados gravados no arquivo linha a linha.
while(fin.get(c))
cout << c;
}
Usamos o objeto chamado fin da classe ofstrem. Com isso nós tivemos a
possibilidade de ler caracter a caracter no arquivo denominado TESTE.TXT.
Verifique que no loop while( ) foi utilizada a instrução fin.get( ) realiza a leitura
do caracter gravado no arquivo.
Muitoooooo Fácilllllll!!
void main( )
{
ofstrem fout(“TESTE.TXT”);
fout << “Nome: Juan Gabriel\n”;
fout << “Nascimento: 23/Jan/2004\n”;
fout << “Signo: Aquário\n”;
}
Usamos o objeto chamado fout da classe ofstrem. Com isso nós tivemos a
possibilidade de gravar linha a linha no arquivo denominado TESTE.TXT.
Vejamos a seguir como efetuar a leitura dos dados gravados no arquivo linha a
linha.
void main( )
{
ofstrem fout(“TESTE.TXT”);
char buff[80];
ifstream fin(“TESTE.TXT”);
class Livro
{
private:
char titulo[40];
char autor[30];
char editora[20];
int isbn;
public:
void entrada( );
void saida( );
};
void Livro::entrada( )
{
clrscr( );
void Livros::saída( )
{
clrscr( );
do{
book.entrada( );
arqes.write((char *)&book, sizeof(Livros));
cout << “\n\nCadastra outro livro? (s/n)”;
}while(getche( )!=’n’);
clrscr( );
if(argc != 2)
{
cout << “\nSintaxe: C:\>FILEX nomearq”;
exit(1);
}
fin.open(argv[1]);
while(fin.get(c))
x++;
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
FILE *arch;
char encriptado[100],
desencriptado[100],
r,
pas[11];
int longitud,i;
arch=fopen("Dados.txt","w");
clrscr( );
longitud = strlen(encriptado);
for (i=0;i<longitud;i++)
{
encriptado[i] = char(toascii(encriptado[i])+122);
}
fprintf(arch,"%s",encriptado);
cout << "\n\nSeu texto criptografado fica assim: " << encriptado;
if (toupper(r)=='S')
{
cout<<"\n\nEntre com a senha para descriptografar seu texto: ";
cin >> pas;
if (strcmp(pas,"piresboente")==0)
{
cout << "\n\nSeu texto descriptografado fica assim: ";
for(i=0;i<longitud;i++)
{
desencriptado[i]=char(encriptado[i])-122;
cout << desencriptado[i];
}
}
else
{
cout << "\n\n\nLamento acesso negado...";
getch( );
}
}
else
cout << "\n\nObrigado por utilizar esse programa...";
getchar( );
fclose(arch);
return(0);
}
Note que através desse programa exemplo podemos realizar dois processos
de simples manipulação: A criptografia e a descriptografia (função inversa da
criptografia). Uma questão interessante que ocorre é o fato de que o usuário deve
validar uma senha para que o texto criptografado seja então, efetivamente,
descriptografado.
Você pode aplicar essa teoria na prática quando precisar criar um programa
que execute esse tipo de função.
Exercícios
1- O que é criptografar?
2- O que é descriptografar?
3- Onde e quando iniciou a criptografia?
4- Escreva um programa em C++ capaz de criptografar uma certa mensagem
que será fornecida pelo usuário através do teclado.
5- Escreva um programa em C++ que seja capaz de descriptografar uma
mensagem criptografada anteriormente, mediante a validação de uma certa
senha de permissão.