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
Download

C++ Aplicado para Fazer Simulaç ˜oes de Monte Carlo