C++ Aplicado para Fazer Simulações de Monte Carlo Veit Schwämmle Centro Brasileiro de Pesquisa Fı́sica 25 de outubro de 2007 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1 Estrutura do curso Classes 2/9 Vetores dinâmicos ■ ■ Você quer declarar o tamanho de um vetor obtido de um número que calculou no seu programa Importante é que a memória de cada vetor declarado deve ser eliminada ao sair do ambiente local dele. Se não for, é possı́vel que o programa precisa de mais e mais memória até paralisar o computador ■ Os operadores new e delete estão usados para fazer tudo isso void func ( ) { f l o a t ∗ vec ; f l o a t ∗∗ m a t r i x ; i n t n= c a l c l e n g t h ( ) ; vec = new f l o a t [ n ] ; m a t r i x = new f l o a t ∗ [ n ] ; f o r ( i n t i =0; i <n ; i ++) m a t r i x [ i ] = new f l o a t [ n ] ; ... delete [ ] vec f o r ( i n t i =0; i <n ; i ++) delete [ ] m a t r i x [ i ] ; delete [ ] m a t r i x ; } 3/9 2 Parâmetros para funções Têm duas possibilidades de dar valores para funções: void func ( i n t a ) ; void func2 ( i n t &a ) ; i n t main ( ) { int x (5) , y (6); func ( x ) ; func2 ( y ) ; cout << x << endl ; cout << y << endl ; // 5 / / 10 } void func ( i n t a ) { a += 4 ; } void func2 ( i n t &a ) { a += 4 ; } Ao passar um vetor para uma função, os valores sempre vão ser mudados. Por que? 4/9 Classes / O que é ■ ■ ■ ■ ■ ■ ■ Óptimo para estruturar programas Agrupar partes do programa em objectos com possibilidade de diversas hierarquias Cada objecto poder conter funções e variáveis, e muito mais . . . As mensagens entre os objectos: chamar uma função de um objecto dentro de outro Conceito para juntar as partes de um objecto: classe Classes têm partes privadas (somente visto na classe) e partes públicas Possibilidade de herança, uma classe herda de outra 5/9 3 Classes / Definição <t i p o > < i d e n t i f i c a d o r > (< v a l o r i n i c i a l > ); <t i p o > < i d e n t i f i c a d o r > (< l i s t a de par âmetros > ); s t r u c t < i d e n t i f i c a d o r > { < l i s t a de v a r i á v e i s > } ; class < i d e n t i f i c a d o r > [ < : l i s t a das c l a s s e s base >] { < l i s t a de membros> } ; 6/9 Classes / Exemplo # include <iostream > # include < s t r i n g > using namespace s t d ; class b i b l i o t e c a { private : / / Dados membro da c l a s s e ” b i b l i o t e c a ” i n t ano ; s t r i n g t i t u l o ; public : / / Funç ões membro da c l a s s e ” b i b l i o t e c a ” void Read ( i n t &an , s t r i n g & t i t ) ; void Save ( i n t an , s t r i n g t i t ) { ano = an ; titulo = tit ; } }; void b i b l i o t e c a : : Read ( i n t &an , s t r i n g & t i t ) { an = ano ; tit = titulo ; } 7/9 4 Classes / Exemplo i n t main ( ) { b i b l i o t e c a bib1 ; int x ; string y ; bib1 . Save (1982 , ” Faust ” ) ; bib1 . Read ( x , y ) ; cout << ” V a l o r de par1 . a : ” << x << endl ; cout << ” V a l o r de par1 . b : ” << y << endl ; } Com o comando biblioteca bib1; você gera o objecto bib1 da classe biblioteca. Pode gerar mais que um. 8/9 Dicas para as classes ■ private e public Se não diz nada, todos os membros são private Operador para identificar declaração de uma função, ::, biblioteca::Read() ■ Operador para chamar função ou variável de uma classe, ., bib2.Save(1999,"XYZ") ■ Declarar classe é como declarar uma variável ■ Classes podem conter como membros variáveis, funções, operadores sobrecarregados, ... e outras classes ■ ■ 9/9 5