0% acharam este documento útil (0 voto)
6 visualizações5 páginas

Aula 3

Membros de Classe: Public, Private e Protected

Enviado por

allana santos
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
6 visualizações5 páginas

Aula 3

Membros de Classe: Public, Private e Protected

Enviado por

allana santos
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 5

Aula 3º

Construtores e
Destrutores

Querido(a) aluno(a),
Para ampliar ao máximo sua capacidade de estudo,
compreensão do texto e construção dos conhecimentos, segue
uma dica: durante a leitura desta e das demais Aulas desta
disciplina, procure criar um ambiente que permita o máximo
possível de concentração. Pense no que vai precisar e deixe
tudo à mão: livros, apostilas, anotações, dicionário etc. Se for
utilizar o computador, abra os arquivos e aplicativos que serão
necessários ou úteis e avise a todos que você irá estudar.
Boa aula!
Bons estudos!

Objetivos de aprendizagem

Ao término desta aula, vocês serão capazes de:

• identificar alguns componentes da POO;


• declarar construtores e destrutores em seus programas.
Programação Orientada a Objeto (Poo) 20
caes_class();
Seções de estudo };
caes_class::caes_class() { caes_
1 - O que são os construtores e destrutores? class::nome = “Snoopy”; caes_class::cor_
2 - Declaração de construtores pelo = “Marrom”; caes_class::cor_olho
3 - A importância dos construtores e dos destrutores = “Pretos”; caes_class::peso = 6.3;
}
int main()
1 - O que são os construtores e {
destrutores? caes_class snoopy;
cout << “Nome do cachorro : “ <<snoopy.
Construtores podem ser comparados a trabalhadores que preenchem nome<<endl; cout <<”Cor dos pelos....:
com dados os campos vazios com valores padrão. Aqui se inicia mais uma “ <<snoopy.cor_pelo<<endl; cout <<”Cor
parte da POO onde vamos mostrar como funcionam os construtores. dos olho.....: “ <<snoopy.cor_
olho<<endl; cout <<”Peso.............:
O construtor de um objeto é um método executado “ <<snoopy.peso<<endl;
quando o objeto está sendo criado. Ele normalmente é }
utilizado para inicializar dados, predeterminados do objeto.
Tecnicamente falando, com um construtor nós podemos
determinar valores aos atributos de um objeto, assim que é Note que as regras para definição de um construtor são:
executada a aplicação (SAVITCH, 2004). a) o construtor deve ter o mesmo nome da classe;
Vamos para um exemplo básico prático: suponha que b) não tem tipo de retorno;
um programador queira inicializar uma variável de nome c) é executado apenas um, apenas uma vez, no
“i” com o valor “ 0 ”(zero), toda a vez que eu executar o momento da criação do objeto;
programa isso torna-se fácil, pois para que isso ocorra basta d) não pode ser chamado diretamente;
fazer a declaração de atribuição no início do programa “i=0”. e) deve ser “public”.
Agora queremos inicializar o objeto cão com valores nos Um construtor “private” não permite que a classe seja
seguintes atributos: nome: “Snoopy”, cor do pêlo: “marrom”, criada ou instanciada. Isso pode ser conveniente em alguns
cor dos olhos: “preto”, peso: 6,5. aspectos, por exemplo, se a classe contiver somente membros
Neste exemplo, nós podemos utilizar o método “static” (VASQUEZ, 2013).
construtor para inicializar esses valores aos atributos do Ainda para Vasquez (2013), tirando essas regras, os
objeto, assim que a aplicação for executada ela inicializará construtores são como os métodos convencionais e podem
os atributos do objeto com esses valores que acabamos de ser sobrecarregados e conter parâmetros.
citar, e para que isso ocorra temos que declarar um construtor. A função dos construtores é inicializar ou dar forma à
Vamos utilizar um dos exemplos da Aula anterior para classe. É nele que indicamos os valores dos campos de uma
entendermos a utilização e declaração de um construtor. classe. Esses valores podem ser internos, no código; ou
Utilizaremos o método para inicializar os atributos do objeto. externos, passados por parâmetros (VASQUEZ, 2013).
Para isso, analisem a diferença no código onde usaremos o
método construtor e no código onde não usamos o método. Como é comum que um objeto requeira inicialização antes de ser usado,
existem as funções construtoras. Um exemplo de função construtora
CONCEITO para a classe PILHA poderia ser (UFES, 2013):
PILHA : :PILHA ()
Construtores podem ser comparados a trabalhadores que preenchem { int r;
com dados os campos vazios com valores padrão. Aqui se inicia mais uma /*Verifica o tamanho
parte da POO onde vamos mostrar como funcionam os construtores. */
tamanho = TAM_MAX_PILHA;
Construtores pais não são chamados implicitamente se a /* Zera o vetor
classe filha define um construtor. Para executar o construtor que serve de base a pilha
da classe pai, uma chamada a parent:: construct() dentro do */
construtor da classe filha é necessária. for (r=0; r<tamanho; r++)
pilha[r] = 0;
Vejamos: /* Inicializa o
topo */
#include <iostream> topo = 0;
#include <string> using namespace }
std; class caes_class
{ Observe que neste exemplo foi retirado o parâmetro que indicava o
public: string nome; string cor_ tamanho da pilha sendo assumido o tamanho máximo. Mais adiante
pelo; string cor_olho; float peso; será abordado o tema dos parâmetros para as funções construtoras.
21
Nota-se também que a função construtora não tem “tipo de retorno”. rectangle x = y;
Isso ocorre porque as funções construtoras não podem retornar valores.
Da mesma forma que a função construtora executa automaticamente ou
quando um objeto é criado, a função destrutora executa automaticamente
rectangle x(y);
quando um objeto é destruído. A função destrutora tem o mesmo nome
da classe antecedido do símbolo “~”. Um exemplo de função destrutora
Em qualquer caso, uma referência para y seria passada
para a classe PILHA pode ser:
para obj. Vejamos o exemplo:
PILHA :: ~PILHA()
{ 1.#include <iostream>
printf(“Pilha destruida\n”); 2.#include <string>
} 3.using namespace std;
4.class caes_class
5.{
2 - Declaração de construtores 6. public:
7. string nome;
Já que conhecemos os construtores e sabemos que ele é muito 8. string cor_pelo;
importante para a POO, vamos agora declará-los e utilizá-los na POO. 9. string cor_olho;
Desejo a todos bons estudos. 10. float peso;
11. caes_class (string fnome,
Declaramos os valores de atributos dentro da classe que string fcor_pelo, string fcor_olho,
criamos “caes_ class::caes_class”. Na função float fpeso);
main, declaramos atributos ao objeto, mas de uma forma 12.};
diferente onde diminuímos a quantidade de linhas de nosso 13.caes_class::caes_class(string
código. fnome, string fcor_pelo,
O efeito parece o mesmo do exemplo anterior, mas string fcor_olho, float fpeso){
devemos salientar que o código fica muito mais organizado, 14. nome = fnome;
e a sua função main fica mais limpa (JAMSA; KLANDER, 15. cor_pelo = fcor_pelo;
1994; SAVITCH, 2004). 16. cor_olho = fcor_
O nome da função construtora é igual o de sua classe olho;
no construtor traz especificado em sua lista de parâmetros os 17. peso = fpeso;
dados que ele requer para realizar a sua tarefa. Quando criamos 18.}
um novo objeto, colocamos esses dados entre os parênteses 19.int main()
20.{
que se seguem ao nome do objeto, como no exemplo, que se
21. caes_class
segue na linha 11 que é declarado dentro da classe com acesso
snoopy(“Snoopy”, “Marrom”,
público do anterior.
“Pretos”,
Caso um construtor não for declarado, a aplicação irá
6.6);
criar um construtor padrão para cada objeto declarado. Para
22. cout << “Nome do
um construtor que não aceita argumento ele será chamado de
cachorro : “ <<snoopy.nome<<endl;
construtor padrão.
23. cout <<”Cor dos
Para a classe que não tem um construtor, o compilador
pelos....: “ <<snoopy.cor_pelo<<endl;
cria um construtor padrão. O construtor padrão não inicializa
24. cout <<”Cor dos
os membros de dados de uma classe com algum valor, mas
olho.....: “ <<snoopy.cor_olho<<endl;
ele chama o construtor padrão para cada membro de dados.
25. c o u t
Quando um objeto é usado para inicializar outro, uma cópia
<<”Peso.............: “ <<snoopy.
bit a bit é feita. Em muitos casos, este mecanismo de cópia é peso<<endl;
perfeitamente adequado. 26. return 0;
Porém, há casos onde esta cópia simples pode 27. }
ser perigosa. Por exemplo, quando um objeto contém
apontadores para áreas alocadas dinamicamente. Em tais Podemos também trabalhar com destrutores que é uma
casos, a cópia implicaria em um compartilhamento de dados forma de limpar os valores dos atributos. Um destrutor faz
que poderia não ter exatamente o efeito desejado. o inverso do construtor. Enquanto um construtor inicializa
Segundo Savitch (2004), para tais situações, C++ objetos, os destrutores, como o próprio nome sugere,
permite a definição de um construtor de cópia. Quando um destroem um objeto.
construtor de cópia existe, a cópia por bits não é utilizada. A Neste caso, os destrutores são executados
forma geral de declarar um construtor de cópia é nome-classe automaticamente (eles nunca são chamados a partir do código
(const nome-classe &obj) { ... }; Onde obj é uma referência para do programa). O código do destrutor tem o fundamento de
o objeto do lado direito da inicialização. A forma de uso é, “arrumar a casa”. Exemplo: liberar a memória alocada com
assumindo que exista uma classe rectangle: new.
Programação Orientada a Objeto (Poo) 22
Ademais, nos destrutores existem duas diferenças com para inicializar os valores de algumas ou de todas as variáveis-
relação aos construtores: eles têm o mesmo nome que a membro e para efetuar qualquer outra espécie de inicialização
classe, mas o nome começa com um til(~), e não é passado a que possa ser necessária.
ele nenhum argumento. O construtor é de suma importância para a POO, pois
ele executa a inicialização de valores dos atributos dos objetos
Os destrutores são métodos que são executados automaticamente (MIZRAHI, 2008).
quando o objeto não é mais utilizado e referenciado. A definição de um Podemos fazer controle de entrada de dados como o
destrutor segue as seguintes regras: demonstrado no exemplo:
a) assim como o construtor, não pode ser chamado diretamente;
b) não tem tipo de retorno; exit(1);
c) tem o mesmo nome da classe precedido de “~”; }
d) não pode conter parâmetros; if ((dia < 1) || (dia > 31))
e) não pode ser sobrecarregado; {
f) não é herdado (processo de herança de classes). cout << “Valor do dia inlegal!\n”;
exit(1);
Veja o exemplo e observe a diferença entre um construtor. }
}
#include <iostream> int DiadoAno::getMesNumero( )
#include <string> using namespace {
std; class caes_class return mes;
{ }
public: string nome; string cor_ int DiadoAno::getDia( )
pelo; string cor_olho; float peso; {
caes_class (string fnome, string return dia;
fcor_pelo, string }
fcor_olho, float fpeso); void DiadoAno::input( )
~caes_class(); {
}; cout << “Entre com o numero do mes:
caes_class::caes_class(string “;
fnome, cin >> mes;
string cout << “Entre como dia do mes: “;
fcor_pelo, cin >> dia;
string fcor_olho, float fpeso) { if ((mes < 1) || (mes > 12) || (dia
nome = fnome; < 1) || (dia > 31))
cor_pelo = fcor_pelo; {
cor_olho = fcor_olho; cout << “Data inlegal programa
peso = fpeso; abortado\n”;
}; exit(1);
caes_class::~caes_class(){ }
nome; cor_pelo; cor_olho; peso; }
} void DiadoAno::output( )
int main() {
{ switch (mes)
caes_class snoopy(“Snoopy”, {
“Marrom”, “Pretos”, 6.6); cout << “Nome case 1:
do cachorro : “ <<snoopy.nome<<endl; cout << “Janeiro “; break;
cout <<”Cor dos pelos....: “ <<snoopy. case 2:
cor_pelo<<endl; cout <<”Cor dos cout << “Fevereiro “; break;
olho.....: “ <<snoopy.cor_olho<<endl; case 3:
cout <<”Peso.............: “ <<snoopy. cout << “Março “; break;
peso<<endl; return 0; case 4:
cout << “Abril “; break;
case 5:
3 - A importância dos construtores e cout << “Maio “; break;
dos destrutores case 6:
cout << “Junho “; break;
Segundo Savitch (2004, p. 177), um construtor é uma case 7:
função-membro que é chamada automaticamente quando cout << “Julho “; break;
um objeto dessa classe é declarado. Utiliza-se o construtor case 8:
23
cout << “Agosto “; break;
case 9: Vale a pena
cout << “Setembro “; break;
case 10:
cout << “Outubro “; break;
case 11:
cout << “Novembro “; break; Vale a pena ler
case 12:
JAMSA, Kris; KLANDER, Lars. Programando em
cout << “Dezembro “; break;
C++: a bíblia. São Paulo: Makron Books, 1999.
default:
MIZRAHI, Victorine Viviane. Treinamento em
cout << “Erro em DaiadoAno::output.
linguagem C. São Paulo: Pearson Hall, 2008.
Contacte o desenvolvedor do sistema.”;
SAVITCH, Walter. Absolute C++. Boston: Addison
}
Wesley, 2001.
cout << dia;
}

Observe, no exemplo, a função TestaData e onde ele está


sendo chamada no programa, podemos constatar que essa
função também é um construtor onde se controla a entrada
de dados. Isso é muito importante para que não seja inserido
Vale a pena acessar
dados errôneos como um dia ou mês inexistente.
Com a declaração de construtores e destrutores podemos Disponível em: http://www2.ele.ufes.br/~hisatugu/
nos precaver de erros de entrada do usuário e a inicialização ApostilaCPP.pdf. Acesso em: 30 nov. 2013.
de objetos com valores predefinidos para que o espaço na Disponível em: http://www.tomasvasquez.com.
memória a ser utilizado não fique reservado e vazio ou com br/cursocsharp/programacao_orientada_objetos_net/
valores que não devem ser mostrados ao longo do programa. construtores-e-destrutores- em-c. Acesso em: 30 nov. 2013

Fique antenado! No site do You Tube você pode encontrar vários vídeos
sobre POO. Sempre que possível, acesse-o e realize buscas utilizando
termos como: Programação Orientada a Objetos, POO, Programação,
C++ como palavras-chave, procure assistir e posicionar-se criticamente
Vale a pena assistir
sobre alguns deles. Sua aprendizagem não tem fronteiras... Pesquise!
Construtor/ destrutor. Disponível em: http://www.
Retomando a aula youtube.com/watch?v=m8qYhYg3J78. Acesso em: 30 nov.
2013.

Ao final desta terceira aula, vamos recordar sobre o Minhas anotações


que aprendemos até aqui.

1 - O que são os construtores e destrutores?


Construtores são funções que devemos utilizar para
inicializar objetos no momento de sua criação, no momento
da execução do programa.
2 - Declaração de construtores

Você está habilitado a declarar os construtores e não


se esqueça de um detalhe muito importante: ao declarar os
construtores lembre-se de que ele tem o mesmo nome da
classe. Declare em seus códigos um construtor pra por em
prática tudo o que vimos até aqui.

3 - A importância dos construtores e dos destrutores


Temos que dar muita importância aos construtores para
que não sejam alocados valores aleatórios nos objetos criados
e para podermos controlar dados de quando os objetos estão
sendo criados.

Você também pode gostar