Programar em C++/Classes: diferenças entre revisões
[edição verificada] | [edição verificada] |
Conteúdo apagado Conteúdo adicionado
Sem resumo de edição |
|||
Linha 52:
</source>
Agora temos assegurados métodos de inclusão e acesso a dados da matriz de caracteres, porém ainda existe um pequeno problema: Quem quiser o antigo método de acesso direto conseguirá facilmente, pois os elementos da
=== Conceituação ===
Linha 112:
*
*
Dentro de uma classe podemos definir diversos modos de visibilidade de variáveis e funções.
Linha 288 ⟶ 287:
|}
Podemos, então, entender os objetos como blocos de dados que têm propriedades (variáveis) e que podem fazer algo (métodos). Então, criamos todas as funcionalidades que precisamos que a classe forneça aos programas, fazendo os testes necessários para assegurar sua consistência e
Para entendermos melhor este conceito podemos fazer uma analogia. Consideremos um objeto resistência: sabemos que temos de usá-lo e que ela deve ter certas características, então teremos o seu valor em Ohms, sua potência máxima, tolerância, entre outras, e teremos uma função que nos dará a corrente que passa por ela quando lhe aplicamos uma tensão elétrica. Não precisamos saber de que é que ela é feita, ou como estas características internas a faz funcionar, basta-nos receber os resultados.
Linha 294 ⟶ 293:
Vejamos o exemplo:
Agora vamos mostrar que podemos ter funções membro apenas como protótipos e defini-las fora da classe. Para isso usamos o operador de definição de escopo '''::''' que permite definir o local do código onde um identificador existe, no formato: '''''ESCOPO::função''''' ou '''''ESCOPO::dado'''''. De maneira geral, quando declaramos identificadores dentro da classe podemos
<source lang=cpp>
Linha 319 ⟶ 318:
int main ()
{
CRectangle rect; //definimos
rect.set_values (3,4); //
cout << "area: " << rect.area();
system (“pause”);
Linha 344 ⟶ 343:
int main ()
{
CRectangle rect; //definimos
rect.set_values (3,4); //
cout << "area: " << rect.area();
system ("pause");
Linha 455 ⟶ 454:
O encapsulamento visa, primariamente duas metas:
# Eliminar a necessidade de conhecimento da estrutura interna por quem deseja usá-la. Por exemplo, se os objetos precisam manter um conjunto de 4 bytes, isto pode ser conseguido usando-se duas variáveis '''short int''', uma '''int''', um vetor com 4 characteres, ou a variação de qualquer um dos anteriores sem sinal, mas estes detalhes não precisam estar expostos.
# Se a representação interna dos dados for modificada, desde que
Ou seja, o encapsulamento simplifica a programação escondendo as particulariadades da classe e elimina o retrabalho do código por alterações da mesma. Geralmente as funções (métodos) privadas, são auxiliares a outras funções da classe.
Linha 463 ⟶ 462:
Há dois métodos para definir as funções membro:
*
*
Neste caso terão de ser identificadas como pertencentes à classe e para isso utilizamos o operador de resolução de escopo “'''::'''”.
Linha 479 ⟶ 478:
As principais características dos construtores são:
*Não têm qualquer
*Não podem ser executados por chamada explícita no código;
*São executados logo depois que os tipos básicos do objeto foram criados;
Linha 527 ⟶ 526:
O destrutor tem as seguintes características:
*
*
=== Declaração ===
Linha 563 ⟶ 562:
</source>
Repare que
*
*
*
*
== "copy constructors" ==
Um "copy constructor" é um construtor especial que toma como argumento a referência de um objeto da mesma classe e cria um novo objeto que é a copia do objeto em referência. Por padrão, o compilador providencia um "copy constructor" que faz a cópia membro por membro do objeto original, construindo um objeto idêntico. Isto é chamado de "shallow copy" ou "member wise".
Em algumas situações a cópia de um objeto não é satisfatória, para ver isso vamos ver a classe employee, abaixo:
|