Contents

Programação Orientada a Objetos em C++


Programação Orientada a Objetos em C++ (POO02)

Palavras reservadas do C++


Alem das palavras reservadas do C as extensões do C++ acrescentam as seguintes palavras reservadas:

asm
catch
class
delete
friend
inline
new
operator
private
protected
public
template
this
virtual

Abordando detalhadamente as classes


--Quando um objeto é criado podemos inicializar vários elementos de dados com valores.
--Usando uma função construtora podemos inicializar variáveis.
--Em C++ o conceito é expandido podendo se usar parâmetros na função construtora de forma que a inicialização das variáveis poderá ser feita com os valores recebidos como parâmetros.
// criacao da classe fila

class fila
{
int q[100];
int sloc, rloc;
int quem; // armazena o numero de identificação da fila
public:
void init(void);
void qput(int i);
int qget(void);
};
A variável quem é usada para identificar e o seu valor é recebido como parâmetro:
// função construtora com parametro
void fila::init (int id)
{
rloc = sloc = 0;
quem=id;
cout << "fila" << quem << " inicializada \n";
}
A passagem de argumento para função construtora, deve ser feita quando associamos os valores na hora da declaração do objeto.
fila a = fila (101);
ou da forma mais empregada:
fila a(101);
criando o objeto "a" do tipo fila o qual receberá como parâmetro valor 101.
O exemplo que segue ilustra a class fila com inicialização recebendo parâmetro:
clas05a.cpp do FTP ou veja aqui...

clas05a.cpp

FUNÇÃO FRIEND


É possível para uma função não-membro de uma class ter acesso a partes privadas de uma class pela declaração da função como sendo um friend da class.

class ci {
.
.
public:
friend void frd(void);
.
};
A função frd() é declarada para ser friend da class ci.
No exemplo que segue podemos ver uma função mesma_cor() que não e membro de nenhuma das classes mas sim friend das duas. Retorna um valor verdadeiro se tanto a classe linha como a classe boxe usarem a mesma cor.
(programa clas06.cpp no FTP ou veja aqui...)
clas06.cpp

Argumentos Padrões para Funções


O C++ permite a uma função associar uma valor padrão para um parâmetro quando nenhum argumento correspondente for usado na chamada da função.
void f (int i =1)

{
.
.
}
na chamada se usar
f(10) // recebe 10 como parâmetro
f() // recebe 1 que é o valor default.
outro exemplo:
void myfunc (int i=5, double d=1.23);
myfunc (12, 3.45) // usara os valores 12 e 3.45
myfunc (3) // usara como myfunc( 3, 1.23)
myfunc () // usara como myfunc(5, 1.23)
Não é permitido omitir o primeiro parâmetro e passar só o segundo. Só se pode omitir da direita para a esquerda. Se tem 5 parâmetros para se omitir o terceiro, também deve se omitir o quarto e o quinto.

RELAÇÃO DE CLASS e ESTRUTURAS em C++


Em C++ a struct tem as mesmas capacidade que uma class.
Assim uma struct também pode incluir alem do dado o código que manipula estes dados.
A diferença é que por definição os membros de uma class são private e os membros de uma struc são public.
Segue um exemplo usando struc:
(class07.cpp do FTP ou veja aqui...)
clas07.cpp
clas08.cpp
clas09.cpp

Funções inline


O C++ possui uma característica importante que é chamada função inline. Uma função inline ao invés de ser chamada é expandida em linha. Assim o compilador insere o código desta função inline em cada ponto onde é chamada. Como vantagem não temos o overhead das chamadas que implica em salvar o contexto e restaurar na volta da função. Como desvantagem o código objeto aumenta pela inserção das instruções da função a cada chamada. Para funções bem pequenas temos vantagens em defini-las como inline pois se o código do salvamento de contexto é maior que a função, sendo inline otimiza o código e executa mais rápido.
O exemplo que segue ilustra a forma de se definir funções inline:
(clas10.cpp do FTP ou veja aqui...)
clas10.cpp

Criando função inline dentro de uma CLASS


Outra forma de se definir uma função do tipo inline é quando definimos a função dentro de uma class e o seu código também é incluído da definição desta class. O exemplo anterior é mostrado a seguir com as funções codificadas na class o que torna inline estas funções.
(clas11.cpp do FTP ou veja aqui...)
clas11.cpp


Contents