programaÇÃo orientada a objectos em c++ criação e utilização de classes e objectos
Post on 21-Apr-2015
121 Views
Preview:
TRANSCRIPT
PROGRAMAÇÃO ORIENTADA A OBJECTOS EM C++Criação e Utilização de classes e objectos
Classe
É uma estrutura de dados e de funções que permite a criação de variáveis com essa mesmo estrutura.
Têm o nome de Objectos.
Objecto
É uma instância definida numa classe.
Um objecto é uma estrutura composta por: Dados ou atributos: designações para
as variáveis existentes nas classes de origem, do objecto;
Métodos: designação para as funções incluídas na classe de origem do objecto;
Características deste tipo de programação:
Encapsulamento: possibilidade de se ocultar ou controlar o acesso à composição interna da classe, aos seus dados e ao código das suas funções membro;
Polimorfismo: Possibilidade de operadores e funções assumirem diferentes formas de forma a poderem ser adaptadas a diferentes tipos de dados;
Características deste tipo de programação (cont.):
Herança: Possibilidade de criar novas classes a partir de outras já existentes, recebendo (herança) a sua composição e características;
Struct
Uma classe é muito parecida a uma estrutura de dados (struct).Recordando uma struct:
struct nome_estrutura{
<lista de campos>}
[lista de variáveis do tipo da estrutura]
Classe
Formato Geral da Classe:
Class nome_classe{
<lista de campos>}
[lista de variáveis do tipo da classe]
Classe - exemplo
class pessoa{char nome[40];int idade;
} p1;
Uma variável declarada como sendo de um tipo de determinada classe deixa de se chamar variável para se chamar objecto.
Public e Private
As palavras public e private são usadas para controlar o acesso aos membros da estrutura ou da classe. Com o private o acesso fica limitado ao interior da estrutura ou da classe e com o public, não.
A única diferença entre uma estrutura e uma classe, neste aspecto, é que numa struct os membros são public por defeito e numa classe são private por default.
Exemplo de programa:
#include <iostream>main(){class pessoa{
public :char nome[40];int idade;
} p1;strcpy(p1.nome, “Ana”);p1.idade=16;cout<<“Nome:” << p1.nome;cout <<“Idade” <<p1.idade;}
Criação e utilização de classes e objectos:
Programa com uma função dentro da classe:
# include <iostream>
main(){
class pessoa{
public:
char nome[40];
int idade;
int ano (int ano_actual)
{return ano_actual – idade;}
} p1;
strcpy (p1.nome, “Ana”); p1.idade = 16;
cout<<p1.nome; cout<<p1.idade;
cout <<p1.ano(2006); }
Cont.
Output: Ana 16 1990
NOTA: se substituíssemos a palavra class por struct, funcionaria da mesma forma.
A função ano() funciona com um parâmetro inteiro (int ano_actual) e devolve um valor inteiro. O valor devolvido é resultante da instrução return ano_actual – idade;
Cont.
Modo como é efectuada a chamada à função ano(), que é membro da classe pessoa e objecto p1.ano(2006).
A função: É chamada através de um objecto do tipo
classe pessoa; p1.ano; É chamada com um parâmetro
correspondente ao ano corrente, p1.ano(2006);
exemplo
Se a idade deixar de ser public e passar a private a função é aceite mas dá erro.ex.class pessoa{
int idade;public:char nome[40];int ano (int ano_actual - idade)
{return ano_actual – idade;}
Solução:
# include <iostream>main(){class pessoa{
private:idade;public:char nome[40];void setidade(int i) {idade=i;}int getidade() {return idade;}int ano (int ano_actual)
{return ano_actual – idade;}} p1;
exemplo
strcpy(p1.nome, “Ana”);p1.setidade(16); // como a idade é privadacout<<p1.nome;cout<<p1.getidade;cout<<p1.ano(2006);
}
SET() : permite introduzir valores em dados privados;
GET() : permite obter os valores de campos privados;
SET()
Void setidade(int i) {idade = i;}
Função tipo void porque não retorna nenhum valor.utiliza o parametro i (int i) para receber como argumento de chamada um valor para atribuir ao campo idade: {idade=i;}
GET()
Int getidade() {return idade;}
Função do tipo int porque retorna um valor desse tipo. Não necessita de parâmetros e limita-se a uma instrução: {return idade;}
Funções-membro definidas fora da classe e operador de resolução de escopo (::)
Quando uma função de uma classe é mais extensa, uma outra prática a fazer é escrever as funções fora da classe e dentro da classe declaram-se os protótipos.
….Class empregado{
char *codigo; float salario;public:char nome[40]; int idade;void setcodigo (char*c) {codigo=c}void setsalario (float s) {salario=s}int *getcodigo() return codigo;}int getsalario() return slario;}void mostradados();
};
main(){empregado e1;strcpy(e1.nome, “Miguel”);e1.idade=28;e1.setcodigo (“A-101”);e1.setsalario (1000);p1.mostradados();
}
Resolução de escopo
void empregado::mostradados(){ //operador de //resolução de escopo
cout<<“Nome”<<nome; cout<<“idade<<idade; cout<<“Codigo”<<getcodigo(); cout<<“salario”<<getsalario();} :: Informa o compilador que determinada função FX() pertence a determinada classe.
Passagem de objectos para funções…
Class produto{
float valor;
public:
void atribui (float v) {valor=v;}
void escreve () {cout<<valor;}
};
void valor_venda(venda v){
v.escreve(); // escreve 10
v.atribui(20); //altera só no local
v.escreve(); // escreve 20
}
main(){venda v1;v1.atribui(v1); //atribui 10 a v1valor_venda(v1); // passa v1 para a funçãov1.escreve(); // escreve 10}
Passagem de objectos para funções através de apontadores
…
Class produto{
float valor;
public:
void atribui (float v) {valor=;}
void escreve () {cout<<valor;}
};
void valor_venda(venda *v){
V->escreve(); // escreve 10
V->atribui(20); //altera só no local
V->escreve(); // escerve 20
}
main(){venda v1, *p; p=&pv1;v1.atribui(v1); //atribui 10 a v1valor_venda(p); // passa v1 para a funçãov1.escreve(); // escreve 10}
top related