Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Curso Programação Cplusplus LCI, Notas de estudo de Engenharia Mecânica

Maiores Informações e Complementos paa a Linguaem C

Tipologia: Notas de estudo

2010

Compartilhado em 17/07/2010

JoãoVictor_Marreiros
JoãoVictor_Marreiros 🇧🇷

4.6

(15)

6 documentos

1 / 97

Documentos relacionados


Pré-visualização parcial do texto

Baixe Curso Programação Cplusplus LCI e outras Notas de estudo em PDF para Engenharia Mecânica, somente na Docsity! Curso de Programação C/C++ DAS / UFSC Alexandre, Minasi Mário, Eduardo, Charles e Fábio http://s2i.das.ufsc.br/ Sistemas Industrias Inteligentes - S2i Depto. de Automação e Sistemas - DAS Universidade Federal de Santa Catarina - UFSC “A caminhada é feita passo a passo, com calma e perseverança.” Curso de Programação C/C++ DAS / UFSC Conteúdo do Curso • Programação C: – Histórico e Motivação; – Conceitos Básicos; – Entrada e Saída Console; – Operadores; – Laços; – Comandos para a Tomada de Decisão; – Funções; – Diretivas do Pré-Processador; – Matrizes e Strings; – Tipos Especiais de Dados; – Ponteiro e Alocação Dinâmica de Memória; – Manipulação de Arquivos em C; Curso de Programação C/C++ DAS / UFSC Quadro Comparativo Sistemas Digitais Microprocessadores CLP Micro-Computador Redes de Computadores c a p a c i d a d e c o m p u t a c i o n a l c u s t o f l e x i b i l i d a d e c o m p l e x i d a d e e x p a n d a b i l i d a d e Curso de Programação C/C++ DAS / UFSC Criando um Programa Executável • Escrever o programa em um editor de texto e salvar em um arquivo ASCII terminando em .C; Chamado Código-Fonte; • Compile o arquivo gerando um arquivo .OBJ; • Linkeditar os arquivos para gerar o aplicativo .EXE; Arq1.C Arq1.Obj Programa: "Olá Mamãe!!!" CPU compilar linkar Arq2.Obj linkar Arq3.Obj linkar MyProgram.Exe ABC Curso de Programação C/C++ DAS / UFSC Estrutura Básica de um Programa C /* Programa : Bom Dia! */ #include <stdio.h> void main() { printf(“Bom Dia!!!!”); } < diretivas do pré-processador > < declarações globais >; main() { < declarações locais >; /* comentário */ < instruções >; } < outras funções > •Main() é única, determina o início do programa!!! Curso de Programação C/C++ DAS / UFSC Constantes • #define <nome> <valor> • const <tipo> <nome> = <valor>; /* Programa: Exemplo do uso de Constantes */ #define Size 4 #define true 1 #define false 0 void main() { const char c = ‘c’; const int num = 10; const int terminou = true; int val = Size; } Curso de Programação C/C++ DAS / UFSC Ponteiros • Armazenam o valor do endereço de uma variável; • Tipo de Dado especial em C. • <tipo> * <nome> = <endereço>; int *pNum = 0; • Ponteiros ocupam 2 Bytes (tamanho de um endereço); • Operador & fornece o endereço de uma variável; /* Exemplo com Ponteiros */ void main() { int num, valor; int *ptr = 0; ptr = &num; num = 10; valor = *ptr; } Curso de Programação C/C++ DAS / UFSC E/ S Console : Printf( ) • Usa bibliotecas: <conio.h> e <stdio.h> • Sintaxe: printf(“string-formatação”, <parm1>, <parm2>, ...); • String-formatação é texto composto por: • "%[Flags] [largura] [.precisão] [FNlh] < tipo > [\Escape Sequence]" Flags Efeito - justifica saída a esquerda + apresenta sinal (+ ou -) do valor da variável em branco apresenta branco se valor positivo, sinal de - se valor negativo # apresenta zero no início p/ octais, Ox para hexa e ponto decimal para reais largura = número máximo de caracteres a mostrar precisão = número de casas após a vírgula a mostrar F = em ponteiros, apresentar como "Far" => base : offset (xxxx : xxxx) N = em ponteiros, apresentar como "Near" => offset h = apresentar como "short" l = apresentar como "long" Curso de Programação C/C++ DAS / UFSC Operadores • Aritméticos: + - * / e o sinal negativo: - ; • Relacionais: && (e), | | (ou), ! (não), < (menor), < (menor igual), > (maior), >= (maior igual), == (igual), != (diferente), ?: (ternário); • Binários, operam nos bits das variáveis, são eles: & (e), | (ou), ^ (ou exclusivo), ~ (não), << (desloca a esquerda), >> (desloca direita); • Operadores de Ponteiros: * (acessa o conteúdo do ponteiro), & (obtém o endereço de uma variável); • Incrementais: ++ (incrementa) ; -- (decrementa); ++a; => incrementa primeiro a e depois a usa (pré-fixado) a++; => primeiro usa a variável e depois a incrementa (pós-fixado) • Atribuição, combinação dos outros operadores, são eles: = , += , -= , *= , /= , %= , >>= , <<= , &= , |= , ^= ; Curso de Programação C/C++ DAS / UFSC Operadores Operadores Tipos ! - ++ -- Unários; não lógicos e menos aritméticos * / % Aritméticos + - Aritméticos < > <= >= Relacionais == != Relacionais && Lógico & || Lógico OU = += -= *= /= %= Atribuição /*Operadores*/ void main(){ int i = 10; int *ptr = 0; i = i + 1; i++; i = i - 1; i--; ptr = &i; (*ptr)++; ptr++; /*incrementa 2 Bytes */ } Curso de Programação C/C++ DAS / UFSC Laços • For: for(<inicialização>; <teste>; <incremento>) instrução; • While: while(<expressão de teste>) instrução; int conta = 0; while(conta < 10) { printf("conta=%d\n",conta); conta++; } int x, y, temp, conta; for(conta = 0; conta < 10; conta += 3) printf(“conta=%d \n”, conta); for( x=0, y=0; x+y < 100; x = x+1, y++) { temp = x + y; printf("%d\n", x+y); } Curso de Programação C/C++ DAS / UFSC Switch( ) switch(F) { case 0: printf("\nDomingo"); break; case 1: printf("\nSegunda-Feira"); break; case 2: printf("\nTerca-Feira"); break; case 3: printf("\nQuarta-Feira"); break; case default: printf(“\nError”); break; } Curso de Programação C/C++ DAS / UFSC Funções Unidade de código de programa autônoma para cumprir uma tarefa dada; <tipo retorno> <nome func> (<tipo> <nome>, <...> <...>) { <declarações locais>; <comandos>; return <expressão ou valor de retorno>; } void main() { doisbeep(); printf("Digite carac:"); getche(); doisbeep(); } #include <stdio.h> doisbeep() { int k; printf("\x7"); /*Beep*/ for(k=1; k<10000; k++) ; printf("\x7"); /*Beep*/ } Curso de Programação C/C++ DAS / UFSC Funções Funções Recursivas: Funções que chamam a si própria; Prototipagem de funções: <tipo> <nome>(<tipo1>, <tipo2>) long int Fatorial(long int i) { if(i > 1) return i*Fatorial(i-1); else return 1; } long int Fatora(long int); void main() { Fatora(15); } Curso de Programação C/C++ DAS / UFSC Diretivas do Pré-Processador •#include : causa a inclusão de uma código fonte em outro, headers (.h) •#if, #ifdef, #ifndef, #elif, #else e #endif : compilação condicional -> portabilidade . #define DEBUG 1 #if DEBUG == 1 printf(“\nERRO = ”, erro1); #elif DEBUG == 2 printf(“\nERRO = ”, erro2); #endif #ifndef WINDOWS #define VERSAO “\nVersão DOS” #else #define VERSAO “\nVersão Windows” #endif #include <stdio.h> -> arquivos fonte do compilador #include “mylib.h” -> arquivos locais Curso de Programação C/C++ DAS / UFSC Diretivas do Pré-Processador •defined : Um alternativa ao #ifdef e #ifndef é o operador defined. •#error : provoca uma mensagem de erro de compilação. •#pragma : notificação ao compilador. #if defined(UNIX) && !defined(INTEL_486) ... #endif #if TAMANHO > TAMANHO1 #error “Tamanho incompatível” #endif #pragma inline -> indica a presença de código Assembly no arquivo. #pragma warn -> avisa para ignorar "warnings" (avisos). Curso de Programação C/C++ DAS / UFSC Matrizes & Strings • Usada para representar um conjunto de dados de um tipo; •Declaração:<Tipo><nome>[<dimensão1>][<dimensão2>]...; •Acesso : <nome>[i][j][k][...] •Inicialização : <nome> = { a0, a1, ..., an-1}; int notas[5]; unsigned float tabela[3][2]; char cubo[3][4][6]; notas[3] = 4; -> acessa o quarto elemento char ch = cubo[1][0][5]; static int tab[] = {50, 25, 10, 5, 1}; char tabela[3][5] = { {0, 0, 0, 0, 0}, {0, 1, 1, 1, 0}, {1, 1, 0, 0, 1} }; tabela[2] == {1, 1, 0, 0, 1}; Curso de Programação C/C++ DAS / UFSC Tipos Especiais de Dados • Como definir novos tipos de dados; •Typedef: criação de novos tipos de variáveis •Enum : atribuir valores inteiros seqüenciais a constantes. Funciona como um label (nomeação). typedef <tipo> <definição> typedef double real_array [10]; /*novo tipo*/ real_array x, y; enum cores { verde = 1, azul = 2, preto, /*recebe valor anterior + 1 = 3 */ branco = 7 }; int i = verde; Curso de Programação C/C++ DAS / UFSC Tipos Especiais de Dados •Estruturas: criação de novos tipos de dados complexos, composto por um conjunto de dados com diferentes tipos. struct <nome> { <tipo> <nome campo>; }[<variáveis deste tipo>]; /*Declaração de variáveis*/ struct <nome> <nome var>; struct Dados_Pessoais { char Nome[81]; int Idade; float Peso; } P1; struct Dados_Pessoais P2; typedef struct Dados_Pessoais { char Nome [81]; int Idade; } Pessoa; Pessoa P1, P2 = {“Karen”, 17}; P1.Idade = 20; typedef struct <nome> { <tipo> <nome-campo>; } <nome tipo>; /* Declaração de variáveis/ <nome-tipo><nome-variável>; Curso de Programação C/C++ DAS / UFSC Tipos Especiais de Dados •Uniões: similar a estruturas, entretanto todos os dados são armazenados no mesmo espaço de memória, que possui a dimensão do maior dado. union <nome> { <tipo> <nome campo>; }[<variáveis deste tipo>]; /* Declaração de variáveis/ union <nome> <nome var>; union Oito-bytes { double x; int i[4]; } unionvar; unionvar.x = 2.7; unionvar.i[1] = 3; •Bitfields: tipo especial de dado para representação de bits. struct <nome> { <tipo><campo>:<numbits>; }; struct Registro_Flags { unsigend int Bit_1 : 1; unsigend int Bit_2 : 1; unsigend int Bit_3 : 1; unsigend int Bit_4 : 1; unsigend int Bit_5 : 1; } Curso de Programação C/C++ DAS / UFSC Ponteiros & Alocação Dinâmica •Argumentos do programa: comandos passados ao programa. •Estruturas: ponteiros são muito úteis se combinados com estruturas. •Lista-ligadas; int main(int argc, char* argv[]); argc:número de parâmetros; argv: lista de paramâmetros. C:> jogo xadrex.txt 2 3.14159 argv[0] == “jogo”; argv[1] == “xadrex.txt”; argv[2] == “2”; argv[3] == “3.14159”; struct lista /* declara estrutura */ { char titulo[30]; char autor[30]; int regnum; double preco; } livro[2]; struct lista *ptrl; ptrl = &(livro[0]); livro[0].preco == (*ptrl).preco == ptrl->preco = 89.95; Curso de Programação C/C++ DAS / UFSC Ponteiros & Alocação Dinâmica •Heap: área livre de memória, usada para a alocação dinâmica. #include <stdio.h> struct xx { int numl; char chl; }; void main() { struct xx * ptr = 0; ptr = (struct xx *) malloc(sizeof(struct xx)); printf("ptr = %x\n", ptr); ptr = (struct xx *) calloc(2,sizeof(struct xx)); if(ptr != 0) *(ptr + 1).numl = 15; free(ptr); } Curso de Programação C/C++ DAS / UFSC Manipulação de Arquivos em C •Tipos: arquivos podem ser binários ou de texto. •Declaração, abertura e fechamento: •Leitura e escrita de caracteres: int mychar; FILE *fileptr; fileptr = fopen(“Arq1.TXT”,”rw”); mychar = getchar(fileptr); while(mychar != EOF) { printf(“%c”, mychar); mychar = getchar(fileptr); } putchar(‘@’,fileptr); fclose(fileptr); FILE *File_ptr; File_ptr = fopen(“Nome do Arquivo”,”<I/O mode>); <I/O Mode> = { “r”, “w”, “b”, “a”, “t”, “+”} fclose(File_ptr); exit(); Curso de Programação C/C++ DAS / UFSC Programação C+ + • C: baixa reusabilidade, legilibilidade e facilidade de manutenção; • Programa de Computador é a representação abstrata de um ambiente ou realidade (modelo matemático ou mundo real); • Difícil modelagem da realidade através de linguagens estruturais; • Orientação a Objetos: Todo ambiente pode ser modelado e simulado a partir de uma descrição dos objetos que o compõe e das relações entre eles. • Nível de detalhe == nível de abstração necessário. Curso de Programação C/C++ DAS / UFSC Programação C+ + • C++ é uma adaptação de C a Orientação a Objetos. • C+ + herda de C a capacidade de gerar programas pequenos, otimizados, de “baixo-nível” e portáveis. • C++ : programas bem estruturados e documentados, boa reusabilidade, de fácil manutenção e expansão, melhores projetos, várias ferramentas; • C+ + : requer mais memória, menor velocidade de execução e difícil otimização do tempo de execução. Curso de Programação C/C++ DAS / UFSC Novidades em C+ + • pode-se declarar uma variável em qualquer ponto de um programa; • não precisa declarar estruturas utilizando typedef; • classes e estruturas podem ter componentes públicos e privados; •extern int n; int n; n = ::n; // escopo •// nova forma de definir comentários •for(int i =0, j=3; i+j<10; i = j++ ) •I/O em C++: Streams <iostream> •biblioteca Stream do C++, terminal: cin, cout e cerr; •cout : saída padrão; •Sintaxe: cout << expressão; Variáveis C++ int x = 2; cout << “x = ” << x; float f = 1.2, g = 3; cout << f << “ ” << g; double dou = 2.14; char ch = ‘F’; cout << “valor = ” << dou << “\nsex = ” << ch; Curso de Programação C/C++ DAS / UFSC Alocação Dinâmica em C+ + • Operadores New (Aloca) e Delete (Libera); • Mais seguros e fáceis de usar; • Podem ser sobrecarregados (reimplementados); • Cuidado com ponteiros nulos; a) como operadores ou função: b) alocação e liberação de matrizes: c) alocação e liberação de matrizes de ponteiros: ptr_tipo = new tipo; ptr_tipo = new(tipo); int * ptr1 = new int; int * ptr2 = new(int); delete ptr1; delete ptr2; ptr_tipo = new tipo[tamanho_matriz]; int * ptr3 = new int[10]; delete[] ptr3; // delete[10] ptr3; ptr_ptr_tipo = new tipo * [tamanho_matriz]; int * * ptr4 = new int * [10]; delete[] ptr4; // delete[10] ptr4; Curso de Programação C/C++ DAS / UFSC Classes e Objetos • Modelar o ambiente; • Componentes do ambiente objetos; • Jogo de Xadrez: •Atributos: dimensões, número de posições livres e cor do tabuleiro; •Métodos: desenhar o tabuleiro na tela e movimentar as peças; • Peças do Jogo de Xadrez • Objetos de um mesmo tipo classes; • Classe “Peão” x Classe “Peça do Xadrez” • Outros componentes: Jogador, Juíz, Usuário, .... Curso de Programação C/C++ DAS / UFSC Classes & Objetos #include <iostream> using namespace std; class Retangulo // Define a classe { private: int bas, alt; // atributos privados public: static int n; // atributos públicos // Construtores e Destrutores Retangulo() { bas=0; alt=0; n++; } Retangulo(int a, int b=0) { bas=a; alt=b; n++; } ~Retangulo() { n--; } // métodos da classe void Init(int b, int h) { bas = b; alt = h; } void PrintData(); }; Curso de Programação C/C++ DAS / UFSC Sobrecarga de Operadores #include <iostream> using namespace std; class Ponto { private: int X, Y; public: Ponto(int aX=0, int aY=0) { X = aX; Y = aY; } void PrintPt() const { cout << '(’ << X << ',’ << Y << ')’; } Ponto operator ++() { ++X; ++Y; Ponto Temp(X,Y); return Temp; } }; int main(int n, char ** argc) { Ponto P1, P2(2,3); cout << "\n p1 = "; P1.PrintPt(); cout << "\n++p1 = "; (++P1).PrintPt(); cout << "\n++p2 = "; (++P2).PrintPt(); P2 = ++P1; cout << "\n p2 = "; P2.PrintPt(); } Curso de Programação C/C++ DAS / UFSC Sobrecarga de Operadores #include <iostream> using namespace std; enum bool { false, true }; class Ponto { public: int X, Y; Ponto(int aX = 0, int aY = 0) { X = aX; Y = aY; } Ponto operator ++(); // prefixado Ponto operator ++(int); // pos-fixado Ponto operator +(Ponto const aP) const; Ponto operator +=(int const aN); bool operator ==(Ponto const aP) const; }; Curso de Programação C/C++ DAS / UFSC Sobrecarga de Operadores Ponto Ponto::operator ++() { //prefixado ++X; ++Y; return *this; } Ponto Ponto::operator ++(int) { //pos-fixado ++X; ++Y; return Ponto(X-1, Y-1); } class PFloat { public: float X, Y; PFloat(float aX = 0, float aY = 0) { X = aX; Y = aY; } operator Ponto() const { return Ponto((int)X, (int)Y);} }; Curso de Programação C/C++ DAS / UFSC Herança Pessoa A B Funcionário C D Cliente E F G Funcionário Pessoa A B C D Cliente E F G Pessoa A B Herança Classe-Base Classes Derivadas Classe Classe •dividimos classes em sub-classes; •herda as características; •classe-base x classe derivada; •classe derivada acrescenta atributos e métodos específicos; •flexibilidade; •organização; •reusabilidade; •expansibilidade; •Programa bem modelado : claro, veloz, enxuto, flexível, pequeno tempo de projeto e boa manutenção. •Herança Múltipla Curso de Programação C/C++ DAS / UFSC Herança #include <iostream> #include <string> using namespace std; #define Nome_Size 80 class Pessoa { protected: char * Nome; int Idade; long int RG; public: Pessoa(){ Nome = new char[Nome_Size]; Idade=0; RG=0;} Pessoa(char* aNome, int aId=0, long int aRG=0); Pessoa(Pessoa const & aP); ~Pessoa() { if(Nome != 0) { delete Nome; Nome = 0;} } char const * GetNome() const { return Nome; } int GetIdade() const { return Idade; } long int GetRG() const { return RG; } void GetData(); }; Curso de Programação C/C++ DAS / UFSC Herança Pessoa::Pessoa(char* aNome, int aId=0, long int aRG ) { Nome = new char[Nome_Size]; strcpy( Nome, aNome); Idade = aId; RG = aRG; } Pessoa::Pessoa(Pessoa const & aP) { Nome = new char[Nome_Size]; strcpy( Nome, aP.GetNome()); Idade = aP.GetIdade(); RG = aP.GetRG(); } void Pessoa::GetData() { cout << "\nNome : "; cin.getline( (char *)Nome, Nome_Size); cout << "Idade : "; cin >> Idade; cout << "RG : "; cin >> RG; } Curso de Programação C/C++ DAS / UFSC Herança int main(int argn, char ** argc) { Pessoa P1("Carlos", 18, 1315678); Cliente C1, C2("Pedro", 1234, 17, 123432); C2.GetData(); C1.Pessoa::GetData(); Pessoa P2 = P1; Pessoa P3 = C1; cout << P1 << P2 << P3 << C1 << C2; return 0; } Curso de Programação C/C++ DAS / UFSC Herança Múltipla class Idade { protected: int idade; public: Idade(int n = 0) { idade = n; } Print() { cout << “Idade: ” << idade; } }; class Nome { protected: char nome[80]; public: Nome(char n[] =“” ) { strcpy(nome, n); } Print() { cout << “Nome: ” << nome; } }; Curso de Programação C/C++ DAS / UFSC Herança Múltipla class Profissao { protected: char nome[80]; public: Profissao(char p[] =“”) { strcpy(nome, p); } Print() { cout << “Profissao : ” << nome; } }; class Pessoa : public Nome, public Profissao, private Idade { public: Pessoa(char n[] = “”, char p[]= “”, int id = 0) : Nome(n), Profissao(p), Idade(id) { } Print() { Nome::Print(); Profissao::Print(); Idade::Print(); } }; Curso de Programação C/C++ DAS / UFSC Classe-Base Virtual class Base { protected: int valor; public: Base(int n = 0) {valor = n;} virtual void Print(){ cout << "\nValor : " << valor; } }; class Deriv1 : virtual public Base { public: Deriv1(int n = 0) : Base(n) { } }; class Deriv2 : virtual public Base { public: Deriv2(int n = 0) : Base(n) { } }; • compartilhar classes-bases; Curso de Programação C/C++ DAS / UFSC Classe-Base Virtual class Super : public Deriv1, public Deriv2 { public: Super(int n = 0) : Base(n) { } int RetValor() { return valor; } void Print() {cout << "\nValor do Super-Objeto : "<<valor;} }; int main(int argn, char ** argc) { Base B(5); Deriv1 D1(10); Super S(343); B.Print(); D1.Print(); S.Print(); return 0; } Curso de Programação C/C++ DAS / UFSC Funções Amigas #include <iostream> #include <strstrea> using namespace std; class Data; // Declara que existe esta classe class Tempo { private: long h, min, s; public: Tempo(long hh = 0, long mm = 0, long ss = 0) { h = hh; min = mm; s = ss; } friend char * PrintTime( Tempo &, Data &); }; • Funções externas mas que acessam dados protegidos; Curso de Programação C/C++ DAS / UFSC Classes I OSTREAM • Buffer para enviar e receber dados; • Arquivos, teclado, vídeo, impressora, portas de comunicação (TCP/IP) .... • ≠ Objetos ≠ Aplicações • ostream_withassign : cout • istream_withassign : cin • operadores de inserção >> e << • ios: classe base da biblioteca • istream: get( ), getline( ), read( ) • ostream: put( ), write( ) • iostream: istream + ostream • fstream : arquivos • strstream : buffer de caracteres Curso de Programação C/C++ DAS / UFSC Classes I OSTREAM #include <iostream> #include <fstream> #include <iomanip> using namespace std; #define Nome_Size 80 class Pessoa { protected: char * Nome; int Idade; long int RG; public: Pessoa(); Pessoa(char * aNome, int aId = 0, long int aRG = 0); Pessoa(Pessoa const & aP); ~Pessoa(); char const * GetNome() const { return Nome; } int GetIdade() const { return Idade; } long int GetRG() const { return RG; } void GetData(); friend ostream & operator <<(ostream & OS, Pessoa const & P); friend istream & operator >>(istream & IS, Pessoa & P); }; Curso de Programação C/C++ DAS / UFSC Classe I OSTREAM Pessoa::Pessoa() { Nome = new char[Nome_Size]; Idade = 0; RG = 0; } Pessoa::Pessoa( char * aNome, int aId, long int aRG) { Nome = new char[Nome_Size]; strcpy( Nome, aNome); Idade = aId; RG = aRG; } Pessoa::Pessoa(Pessoa const & aP) { Nome = new char[Nome_Size]; strcpy( Nome, aP.GetNome()); Idade = aP.GetIdade(); RG = aP.GetRG(); } Pessoa::~Pessoa() { if(Nome != 0) { delete Nome; Nome = 0; } } Curso de Programação C/C++ DAS / UFSC I OSTREAM - Função Open( ) Modos Descrição ios::in Abre para leitura (default de ifstream) ios::out Abre para gravação (default de ofstream) ios::ate Abre e posiciona no final do arquivo – leitura e gravação ios::app Grava a partir do fim do arquivo ios::trunc Abre e apaga todo o conteúdo do arquivo ios::nocreate Erro de abertura se o arquivo não existir ios::noreplace Erro de abertura se o arquivo existir. ios::binary Abre em binário (default é texto). ifstream fin(“Teste.txt”, ios::in|ios::binary); fstream fio; \\ Arquivo para leitura e gravaçao!!!! fio.open(“Lista.dat”, ios::in|ios::out|ios::ate); Bits Função Comentário ios::goodbit good() Nenhum bit setado. Sem erros ios::eofbit eof() Encontrado o fim-de-arquivo ios::failbit fail() Erro de leitura ou gravação ios::badbit bad() Erro irrecuperável Curso de Programação C/C++ DAS / UFSC I OSTREAM - Buffer de Caracteres #include <iostream> #include <strstrea> using namespace std; int main(int argc, char* argv[]) { ostrstream OS; // Cria buffer para a escrita OS << "123.45 \t" << 555.55 << "\t" << 333; OS << "\n\n Sorte = Estar_Preparado + Oportunidade"; OS << ends; char * ptr = OS.str(); double x, y; int i; istrstream IS(ptr); IS >> x >> y >> i; cout << x << '\t' << y << '\t' << i << '\n' << ptr; return 0; } Curso de Programação C/C++ DAS / UFSC I OSTREAM - Periféricos Nome Descriçao CON Console (teclado e vídeo) AUX ou COM1 Primeira porta serial COM2 Segunda porta serial PRN ou LPT1 Primeira porta paralela LPT2 Segunda porta paralela LPT3 Terceira porta paralela NUL Periférico Inexistente ofstream oprn(“PRN”); ofstream ocom1(“COM1”); ifstream ilpt2(“LPT2”); Curso de Programação C/C++ DAS / UFSC Namespace using namespace std; namespace RobotVision { class RobotEye { //declarations and some implementation RobotControler::RobotSensor S1; }; class RobotImageProcessing { //declarations and some implementation }; } Curso de Programação C/C++ DAS / UFSC Templates • Tipo do dado é desconhecido; • Compilação: define o tipo; • Pode assumir qualquer tipo; • Declaração: • Especificação: Template < class Anyone > class String { private: struct Srep; Srep* rep; public: String(); String(const Anyone*); String(const String&); Anyone read(int i) const; //... }; String< char > S1; String< int > C1; String< double > D2; Curso de Programação C/C++ DAS / UFSC Templates template< class Anyone > struct String< Anyone >::Srep { Anyone* s; // pointer to elements int size; //... }; template< class Anyone > Anyone String< Anyone >::read(int i) const { return rep->s[i]; } template< class Anyone > String< Anyone >::String() { rep = new Srep; } Curso de Programação C/C++ DAS / UFSC Conteineres • Classes para armazenamento e gerenciamento de dados; • Iteradores: estrutura utilizada para acessar o conteúdo do conteiner; • vector<T>: armazena na forma de um vetor com tamanho variável; • deque<T>: vetor com tamanha variável e acesso aleatório; • list<T>: conjunto (lista) de dados de um tipo com tamanho variável; • set<T, compare>: suporta chaves únicas, com acesso rápido; • multiset<T, compare>: suporta chaves duplicadas, com acesso rápido; • map<T, compare>: suporta chaves únicas, com acesso rápido; • multimap< T, compare>: suporta chaves duplicadas, com acesso rápido; Curso de Programação C/C++ DAS / UFSC Conteineres #include <iostream> #include <vector> using namespace std; void pause() { char lixo; cout << "\nPress any key to continue"; cin >> lixo; } void printvector(vector<int> v) { int i=0; cout << "Vector: "; for (i=0; i < v.size(); i++) cout << v[i] << " "; cout << "\n"; } Curso de Programação C/C++ DAS / UFSC Conteineres int main(int argc, char* argv[]) { cout << "Programa exemplo de contaneres\n”; cout << “\nvector<int> v(3,2)\n"; vector< int > v(3,2); // Declara v como container vector do tipo int printvector(v); pause(); cout << "\nv.push_back(5); // Insere o elemento 5 no final da sequencia\n"; v.push_back(5); // Insere o elemento 5 no final da sequencia printvector(v); pause(); Curso de Programação C/C++ DAS / UFSC Tratamento de Exceções try //Definindo a região sobre monitoramento { Memory MemObj() Função_Perigosa(); throw MemObj; } //Tratando as exceções catch(Memory a_oMem) //SemMemoria { //Ações para quando não há memória! } catch(File F) // ArquivoNaoEncontrado { //Ações para quando o arquivo não é encontrado! } catch(...) //Opção Default { //Ações para um erro inesperado! } Curso de Programação C/C++ DAS / UFSC Tratamento de Exceções #include <iostream> usind namespace std; void S2iFunc( void ); class S2iTest { public: S2iTest(){}; ~S2iTest(){}; const char* ShowReason() const { return "Exceção na classe S2iTest!";} }; class S2iDemo { public: S2iDemo(); ~S2iDemo(); }; Curso de Programação C/C++ DAS / UFSC Tratamento de Exceções S2iDemo::S2iDemo() { cout << "Construindo S2iDemo." << endl; } S2iDemo::~S2iDemo() { cout << "Destruindo S2iDemo." << endl; } void S2iFunc() { S2iDemo D; // cria um objeto da classe S2iDemo cout << "Em S2iFunc(). Throwing a exceção S2iTest." << endl; throw S2iTest(); //Envia S2iTest para o tratador! } Curso de Programação C/C++ DAS / UFSC Classe String int main(int argc, char* argv[]) { char t_sBuffer[] = “O rato roeu a roupa do rei de roma!”; string Str = “”; string Name = “Janaina”; Str = t_sBuffer; Name += “ robou queijo”; Name.append(“ do vizinho”); if( Str.find(‘e’) >= 0 ) cout << “\nLetra ‘e’ encontrada!”; Str[1] = ‘r’; char temp[] = Str.c_str(); cout << “\n” << temp; cout << “\n” << Name; return 0; } Curso de Programação C/C++ DAS / UFSC Sistemas I ndustriais I nteligentes • Parceria com a Pollux; • Parceria com outras empresas; • Parceria com o WZL/Alemanha; • Projetos de Pesquisa pelo FINEP; • Oportunidade de Pesquisas em Alta Tecnologia; • Grupo Multidisciplinar e Internacional; • Alto padrão de qualidade; • Proposta: Centro de Excelência em Visão na América Latina; • Quer saber mais? • FALE COM A GENTE! ORTH@DAS.UFSC.BR HTTP://S2I.DAS.UFSC.BR This document was created with Win2PDF available at http://www.daneprairie.com. The unregistered version of Win2PDF is for evaluation or non-commercial use only.
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved