Apostila - Programa--o C++
169 pág.

Apostila - Programa--o C++


DisciplinaOrganização de Computadores6.409 materiais120.116 seguidores
Pré-visualização50 páginas
classe. Crie funções conversoras dos tipos básicos (int, 
char, float, ...) para objetos desta classe. Sobrecarrrege o operador [] para controlar o acesso a 
elementos individuais da classe string e crie uma função que converta objetos da classe string em 
um ponteiro do tipo char. 
 
15.4 Inclua uma sobrecarga do operador de chamada à função () na classe string anterior. O 
seu protótipo é o seguinte: 
 void operator ()(int n, char ch); 
 
Esta sobrecarga atribui o caracter ch ao n-ésimo caracter da cadeia. Escreva um programa de 
teste. 
 
15.5 Crie uma classe para representar as cores (class Cor). Sobrecarrege os operadores 
aritméticos e relacionais para esta classe. Utilize o princípio, que a soma de duas cores é uma cor 
misturada com metade de cada uma das cores anteriores. Defina as outras funções aritméticas. 
Utilize os operadores para os objetos cout e cin, para ler e escrever dados desta classe. 
 
 
Curso de Linguagem Computacional C/C++ 
________________________________________________________________________________________________ 
Sistemas Industriais Inteligentes \u2013 DAS \u2013 CTC \u2013 UFSC 120 
16 Herança 
Nos capítulos anteriores definimos que classe representa um tipo de objeto. Então, quando 
modelamos um ambiente através da orientação a objetos, criamos uma classe para cada tipo de 
objeto presente e modelado no ambiente. Entretanto, existem alguns tipos (classes) de objetos que 
possuem características semelhantes com outros tipos (classes) de objetos. 
Por exemplo, quando estamos modelando o funcionamento de um banco, podemos definir 
como objetos do modelo o cliente que chega na agência e os funcionários do banco. Ao 
modelarmos estas duas entidades, percebemos que ambas possuem determinadas características em 
comum; ambas entidades são seres humanos. Por serem pessoas, ambas as entidades conterão 
necessariamente a descrição de uma pessoa mais os seus dados específicos. Para não representar 
duas vezes o elemento pessoa, uma na entidade cliente e outra na entidade funcionário, criamos 
então uma entidade separada chamada pessoa e descrevemos através desta a entidade pessoa. Após 
a definição desta nova entidade, dizemos que as classes funcionários e clientes herdam da classe-
base pessoa todas as caracterísiticas que definem um ser humano no nosso modelo. Na figura 
abaixo apresentamos a diferença entre as duas modelagens. 
Pessoa
A B
Funcionário
C D
Cliente
E F G
Funcionário
Pessoa
A B
C D
Cliente
E F G
Pessoa
A B
Herança
Classe-Base
Classes Derivadas
Classe Classe
 
Figura 3 : Modelagem aplicando-se o princípio da Herança. 
O processo de hierarquia está presente quando dividimos classes em sub-classes, mantendo-
se o princípio de que cada subclasse herda as características da classe da qual foi derivada. Além 
das caracterísiticas herdadas, cada subclasse tem suas características particulares. Em programação 
orientada a objetos, o conceito de subclasse ou classes derivadas é chamado de herança. 
Em C++, a classe de origem é chamada classe-base e as classes que compartilham as 
características de uma classe-base e têm outras características adicionais são chamadas de classes 
derivadas (ver Figura 3). Em C++, definimos uma classe-base quando identificamos características 
comuns em um grupo de classes. 
Com o princípio da herança, além de precisarmos modelar somente uma vez a entidade 
pessoa, o nosso modelo ainda ganha em flexibilidade e em organizaçao do projeto. Suponha que 
Curso de Linguagem Computacional C/C++ 
________________________________________________________________________________________________ 
Sistemas Industriais Inteligentes \u2013 DAS \u2013 CTC \u2013 UFSC 121 
neste modelo você tenha que futuramente incluir a entidade \u201cacionista\u201d no modelo do banco. Bem, 
considerando que todo acionista também é um ser humano, basta definir que a classe acionista será 
derivada da classe-base pessoa, herdando todas as suas propriedades (métodos e atributos), e 
adicionar a classe acionista as suas propriedades particulares. 
Podemos ainda refinar o modelo acima, criando diferentes classes para modelar diferentes 
tipos de clientes. Podemos criar uma classe para modelar os clientes que são universitários. Esta 
classe seria um refinamento da classe cliente e, por isso, representamos esta entidade como uma 
classe derivada da classe cliente. Neste sentido, somente precisamos adicionar as propriedades 
particulares da classe cliente-universitário como: o número de matrícula, o nome do curso e a data 
prevista para a formatura. Uma classe que é derivada de uma classe-base pode, por sua vez, ser a 
classe-base de outra classe. 
Outro aspecto importante é a reutilização do programa. Suponha que amanhã apareça um 
projeto para modelarmos uma célula de produção de uma fábrica. Neste modelo, precisamos 
modelar pessoas com diferentes propriedades: engenheiros, gerentes e funcionários. Neste caso, 
podemos utilizar a nossa classe-base pessoa para definir estas três novas classes, ganhando assim 
em tempo de projeto. Se recebermos um outro novo projeto para representar uma padaria, 
poderemos então aproveitar diversas entidades do nosso modelo como as classes pessoa, cliente, 
funcionário e cliente-universitário. Diminuindo, assim, consideravelmente o tempo deste projeto. 
Você pode então criar uma biblioteca com todas as classes definidas que poderão vir a ser o 
núcleo de muitos programas. Desta forma, você terá grandes vantagens em termos de reutilização e 
baixo custo de projeto.O uso de uma biblioteca de classes oferece uma grande vantagem sobre o uso 
de uma biblioteca de funções: o programador pode criar classes derivadas de classes-base da 
biblioteca. Isto significa que, sem alterar a classe-base, é possível adicionar a ela características 
diferentes que a tornarão capaz de representar exatamente o que desejamos. A facilidade com que 
classes existentes podem ser reutilizadas sem ser alteradas é um dos maiores benefícios oferecidos 
por linguagens orientadas a objetos. 
O processo de herança vai além da derivação simples. Uma classe derivada pode herdar 
características de mais de uma classe-base. Classes derivadas não estão limitadas a herança única. 
Sempre que estivermos modelando um ambiente, seja este real ou abstrato, precisamos fazê-
lo da forma mais genérica possível. Quando mais genérico for o modelo, mais flexível será o nosso 
sistema e maior será a reusabilidade e expandabilidade do nosso sistema. Modelar um sistema 
significa representar todas as propriedades importantes deste e não descrever este da maneira mais 
detalhada possível. Não exagere no nível de detalhe do seu modelo. Isto diminuirá a flexibilidade 
do seu modelo, aumentará o tempo de projeto, aumentará a quantidade de erros, diminuirá a 
velocidade do programa e aumentará o tamanho deste. 
A orientação a objetos é realmente muito poderosa, permitindo-nos a construção de projetos 
flexíveis, permitindo a reutilização de partes do modelo e do código bem como a fácil expansão do 
sistema. Entretanto, a eficiência do seu programa orientado a objetos depende diretamente da 
qualidade do seu modelo. Modelos enxutos e bem definidos, geram programas velozes e flexíveis. 
Modelos enormes e obscuros, geram programas \u201cgordos\u201d e complexos, cheios de erros, ilegíveis e 
que não podem ser reaproveitados. Tenha conciência ao modelar um sistema e bom-senso para 
definir as classes e as suas relações. O bom entendimento da metodologia orientada a objetos, 
permitirá que você modele adequadamente um sistema qualquer. 
16.1 Derivando uma Classe 
Agora mostraremos como podemos implementar em C++ a criação de uma classe-base e a 
sua derivação criando uma nova classe. Aqui, apresentaremos na forma de um exemplo a sintaxe 
empregada em C++. Como exemplo, vamos modelar a classe Pessoa apresentada como exemplo 
acima e a classe cliente, derivada da classe Pessoa. 
Curso de Linguagem Computacional C/C++ 
________________________________________________________________________________________________