Serviços e-commerce |
Você vende na internet______ |
Produtos Software |
Lísias Correio Brasil________ |
Lísias Código de Barras______ |
Produtos
Livros técnicos |
Algoritmos______________ |
Linguagem C______________ |
C++ |
Sobre o autor do livro_____ |
Delphi__________________ |
Serviços
Cursos pela internet |
Curso de Algoritmos________ |
Curso de Linguagem C______ |
Curso de C++_____________ |
Curso de Delphi____________ |
Livro de C++ (Orientação a Objetos com C++) | forma de venda
ISBN: 85-87147-04-8 |
A linguagem C++ é a linguagem mais utilizada no
mundo para criar softwares competitivos.
Esta linguagem possui inúmeros fabricantes de compilador.
é uma linguagem praticamente universal no seu sentido
mais amplo: quantidade de usuários, existe um compilador para
todas as plataformas (Unix, Linux, Windows, OS/2 ...),
sucesso no desenvolvimento de aplicativos, acesso à
base de conhecimento, desempenho em pontos críticos
e assim por diante.
|
|
Os aperfeiçoamentos do C++ em relação ao C | |
Mesmo que você não queira utilizar a Orientação a
Objetos vale a pena aprender os vários melhoramentos
que foram feitos no C++ com relação a linguagem C.
|
|
Classes: base da Orientação a Objetos | |
A idéia de trabalhar com classes vem do
fato dos estudiosos da Orientação a Objetos
terem procurado aproximar o máximo possível
o desenvolvimento de software das idéias
intuitivas do homem. O fundamento principal que
está por trás dos conceitos de classe é o
encapsulamento. Pilar de sustentação de
todos os conceitos. Neste livro você entenderá
com facilidade como classes são implementadas
fisicamente (programadas) e principalmente
perceberá a importância dos conceitos atrelados
a implementação física para conseguir criar
aplicativos competitivos.
|
|
Objetos: uma outra visão de como são criados | |
Você aprenderá a trabalhar com objetos.
No exemplo do tópico anterior você já pode observar a
criação de um objeto.
|
|
Gerando objetos de forma dinâmica | |
Alocar e liberar objetos de forma dinâmica é umas
das partes mais complexas do C++ porque envolve
um tratamento intenso de ponteiros. Devido a isso,
no livro da Lísias Editora você tem um exemplo
extremamente didático no qual é ensinada a alocação
dinâmica em detalhes.
a seguir está a demonstração de como livro faz um detalhamento
linha a linha do que acontece em termos
de memória com o exemplo do link acima (entendendo este exemplo, você
nunca mais terá dúvidas com ponteiros).
A construtora termina após ter sido atribuido ao membro-de-dado static pObjetoAnterior o endereço do objeto atual utilizando o operador this (linha 29). A partir de agora todo o processo reinicia (voltando o processamento para a linha 37 onde o usuário digita qualquer tecla diferente de [Esc] (valor ASCII 27) para entrar com um novo nome de aluno). Na primeira vez o usuário entrou com o nome "João", digamos que agora ele entre com o nome "José". A imagem da memória com o segundo objeto será a seguinte:
A Figura 5.4 demonstra como fica a memória quando
termina a construtora na montagem do segundo objeto.
Para que a demonstração não deixe dúvidas, faremos
com que seja acrescentado mais um objeto. Digamos
que o usuário resolveu entrar com o último nome de
aluno que é "Juca". A memória terá a seguinte configuração ...
|
|
Sobrecarga de operadores: diminuindo a necessidade de conhecimento | |
Com a sobrecarga de operadores diminui a necessidade de
conhecimento de todas as funções do sistema por parte
do desenvolvedor. Por exemplo, se para somar duas variáveis
do tipo inteiro é utilizado o operador '+', para somar dois
objetos que tenham o mesmo tipo ou não, também pode-se utilizar
o operador '+', desde que este tenha sido sobrecarregado pela
'Equipe Master de Desenvolvimento'. Isto torna o trabalho de
desenvolvimento intuitivo e a produtividade aumenta significativamente.
Este procedimento certamente diminuiu a necessidade de procura,
leitura e entendimento, pois no caso do exemplo, o desenvolvedor
simplesmente invocaria o operador '+', sem ter que descobrir qual
é a função que executa tal tarefa. O exemplo a seguir demonstra a
implementação da sobrecarga.
|
|
Herança: uma idéia intuitiva e fundamental | |
O grande benefício da Herança (um dos dois pilares da
Orientação a Objetos - o outro é o encapsulamento
através de classes) é a reutilização de código.
é com a Herança que você dará o "pulo-do-gato" em
termos de produtividade na construção de sistemas e
mais ainda na facilidade de fazer mudanças neste sistema.
Agora tenha em mente o seguinte: o segredo da herança
está em definir corretamente as classes na fase de análise.
Neste livro (Desenvolvedor Profissional - Orientação a
Objetos com C++) você verá modelos lógicos predefinidos
(análise acabada), fáceis e simples de compreender.
O modelo lógico (análise de sistemas) será implementado fisicamente (programado) em C++ conforme demonstrado a seguir
|
|
Polimorfismo: deixe que o compilador trabalhe por você | |
Polimorfismo é a capacidade do compilador
decidir qual deve ser a função (método)
a ser executada, dependendo do tipo do
objeto em foco. Este é um fator
decisivo na produtividade de uma
equipe de desenvolvimento. Mais
uma vez aqui o segredo está em
definir corretamente as classes
e a hierarquia de herança na
fase de análise. Um outro detalhe importantíssimo
é que o polimorfismo também auxilia um aspecto
fundamental no sucesso de um aplicativo,
que é a capacidade deste poder sofrer mudanças.
Neste capítulo você também verá modelos
lógicos (Análise) já prontos, conforme o
exemplo a seguir.
O modelo lógico (análise de sistemas) será implementado
fisicamente (programado) utilizando-se o polimorfismo
conforme demonstram os links a seguir
|
|
Um estudo de um sistema Orientado a Objetos: IOStream | |
No final do livro está o estudo completo de um
sistema Orientado a Objetos. No caso, o sistema
de fluxo de entrada e saída de dados do C++. Saiba
também como você pode gravar em arquivo objetos
que estão em herança. Você irá estudar uma série
de classes definida em hierarquia conforme o modelo
lógico definido no link seguir.
|
|
Templates: menos programação | |
Você aprenderá que pode criar gabaritos
que constroem funções ou classes genéricas.
é um assunto interessante pois ajuda a
poupar tempo de programação. No exemplo
do link a seguir você tem a definição de um
exemplo clássico de função template.
|
|
Por que aprender a desenvolver programas em C++ parece ser difícil? | |
Para aprender C++ é indispensável que você já
tenha aprendido a Linguagem C, caso você ainda
não conheça esta linguagem veja o
livro Linguagem C da Lísias Editora. Isto porque C++
utiliza todo o conjunto da Linguagem C e acrescenta
a esta os conceitos de Orientação a Objetos.
Os conceitos Orientados a Objetos não são difíceis
de serem aprendidos, a dificuldade da maioria dos
estudantes está no fraco conhecimento de ponteiros
(principalmente), alocação dinâmica e estruturas. Estes
são pontos fundamentais a serem entendidos para que você possa programar
em C++. Um outro segredo está na forma de começar
a estudar e a partir de que ponto. O Livro da Lísias Editora
faz com que você inicie de forma correta.
|
|
Por que este livro é bom? | |
Porque todos os tópicos fundamentais tem
exemplificação prática, isto permite a você
qualificar a importância de um conceito e
como este se aplica em um contexto de programação.
Todos os exemplos/exercícios do livro são pequenos
(nenhum ocupa mais de uma página). Você não terá que
analizar dezenas de linhas de código para entender um
determinado tópico. O autor gastou inúmeras horas de
estudo e planejamento para levar à você exemplos
didáticos, simples e claros de assuntos complexos.
Os Exemplos não querem provar o quão engenhoso é o
autor e sim ensinar.
Você aprenderá como definir fisicamente (programação) modelos lógicos (análise) de forma Orientada a Objetos. Isto em cima de modelos práticos, do dia a dia, que você consegue entender rapidamente, sem divagar e gastar muito tempo sobre modelos complexos. O livro mostra claramente os detalhes que não aparecem no código escrito e que são fundamentais para o entendimento. Estes detalhes sempre são colocados em destaque (vermelho) em modelos (programas) práticos. Estes destaques apontam diretamente para aquilo que está em estudo. |
|
Sumário do livro de C++ | |
1. Entrada e Saída de dados em C++
1.1 Saída de dados 1.1.1 Objeto de saída de dados: cout 1.1.2 Operador de direcionamento de saída: 1.1.3 Saída de dados em outro padrão de código 1.1.4 Saída de erros: cerr 1.2 Entrada de dados 1.2.1 Objeto de entrada de dados: cin 1.2.2 Operador de direcionamento de entrada: >> 2. Aperfeiçoamentos do C++ em relação ao C 2.1 Novas palavras-chave 2.2 Protótipos de funções são obrigatórios 2.3 Valores de argumentos de função 'default' 2.4 Mais um formato para comentário 2.5 Operador de escopo de variável global "::" 2.6 Qualificador de variável: const 2.7 Tipo de dado: enum 2.8 Definindo uma função como sendo inline 2.8.1 Por que não macro no lugar de inline? 2.8.2 Tamanho de uma função inline 2.8.3 Como inline funciona? 2.8.4 Onde definir funções inline? 2.8.5 Vantagens de funções inline 2.8.6 Qual o problema de uma função inline? 2.8.7 Exemplo de utilização de função inline 2.9 Local da declaração de variáveis 2.10 União anônima 2.11 Alocação de memória aperfeiçoada (free store) 2.11.1 Alocação dinâmica com new e delete 2.11.2 Memória indisponível 2.11.3 Operador new com ponteiros far 2.12 Sobrecarregando funções 2.13 Estruturas em C++ 2.13.1 Estruturas com funções 2.13.2 Definindo a função dentro da estrutura 2.13.3 Como enviar um parâmetro a uma função-membro 2.13.4 Definindo múltiplas instâncias de uma estrutura 2.13.5 Funções sobrecarregadas em estruturas 3. Referência 3.1 O que é uma referência? 3.2 Onde utilizar referências? 3.2.1 Passando parâmetros por referência 3.2.1.1 Quando há benefício em utilizar passagem por referência? 3.2.2 Retornando por referência 3.2.2.1 Não retorne referência de dados locais 3.3 Onde a utilização de referência é fundamental? 3.4 Não utilize referência com tipos de dados 'default' 3.4.1 Variáveis temporárias ocultas 3.5 Referência a ponteiro 3.6 Quando é melhor utilizar ponteiro? 3.7 Referência não é ponteiro 4. Classes 4.1 O que é uma classe? 4.2 Sintaxe da descrição de uma classe 4.3 Membros de uma classe 4.3.1 As três seções de uma classe para acesso a membro 4.3.1.1 Seção private 4.3.1.2 Seção protected 4.3.1.3 Seção public 4.3.2 Descrição dos tipos de membros de uma classe 4.3.2.1 Membro: Dado 4.3.2.2 Membro: Funções-membro ou métodos 4.3.2.2.1 Tipos de funções-membro ou métodos 4.3.2.2.1.1 Função membro construtora ou método contrutor 4.3.2.2.1.1.1 Método construtor inicializa um objeto da classe 4.3.2.2.1.1.2 Quando é executado um método construtor 4.3.2.2.1.1.3 Método construtor (função construtora) sobrecarregado 4.3.2.2.1.2 Função-membro destrutora ou método destrutor 4.3.2.2.1.3 Função membro ou método 4.3.2.2.1.3.1 Tipos de funções-membro ou métodos 4.3.2.2.1.3.1.1 Método regular 4.3.2.2.1.3.1.2 Método friend 4.3.2.2.1.3.1.3 Método virtual 4.3.2.2.1.3.2 Como relacionar uma função-membro de uma classe 4.3.2.2.2 Local de definição do código 4.3.2.2.2.1 Código de método definido de forma inline 4.3.2.2.2.2 Código de método definido fora da classe 4.3.3 Visibilidade para acesso a um objeto (Escopo) 4.4 Utilizando classes na prática 4.4.1 Classes derivam de estruturas 4.4.2 Entendendo o que é um objeto 4.4.3 Utilizando método construtor e código inline 4.4.3.1 Sobrecarregando métodos construtores 4.4.3.2 Função construtora com valores de argumentos default 4.4.4 Função-membro destrutora ou método destrutor 4.4.4.1 Evitando um erro comum na utilização de destrutores 4.4.5 Acessando dados privados de uma classe 4.4.6 Friend 4.4.6.1 Tipos de métodos friend 4.4.6.1.1 Métodos friend membros de outra classe 4.4.6.1.1.1 Toda a classe é friend 4.4.6.1.1.2 Somente um ou alguns métodos são friend 4.4.6.1.2 Funções friend isoladas 4.4.6.2 Referência entre classes 4.4.7 Ponteiro this 4.4.7.1 Retornando um objeto com *this 4.4.7.2 Ponteiro this sendo utilizado em objetos dinâmicos 4.4.8 Matrizes de objetos 4.4.8.1 Método construtor com matrizes 4.4.8.2 Método destrutor com matrizes 4.4.8.2.1 Deleção de matriz-de-objetos-ponteiro 4.4.9 Declaração de visibilidade e tempo de vida em classes 4.4.9.1 Visibilidade e tempo de vida de extern, auto e register 4.4.9.2 Visibilidade e tempo de vida static 4.4.9.2.1 Membro-de-dado declarado como static 4.4.9.2.2 Um método declarado como static 4.4.9.2.3 Declarando um objeto (classe) como static 5. Gerando objetos de forma dinâmica 6. Sobrecarga de operadores (overload) 6.1 Operadores que não podem ser sobrecarregados 6.2 Operadores que podem ser sobrecarregados 6.2.1 Operadores unários 6.2.2 Operadores binários 6.2.3 Operadores mistos 6.3 O que não pode ser feito na sobrecarga 6.4 Maneiras de sobrecarregar operadores 6.4.1 Sobrecarregando com método operador 6.4.1.1 Sintaxe da sobrecarga com método operador 6.4.1.2 Exemplo de sobrecarga com método operador 6.4.2 Sobrecarregando com método friend 6.4.2.1 Sintaxe da sobrecarga com método friend 6.4.2.2 Exemplo de sobrecarga com método friend 6.4.3 Sobrecarregar com método operador ou com método friend? 6.5 Criando objetos auxiliares 6.5.1 Evitando o objeto auxiliar, criando objeto sem nome 6.6 Exemplos de sobrecarga de operadores 6.6.1 Sobrecarga do operador = para atribuir uma string 6.6.2 Sobrecarga do operador = para retornar um objeto com this 6.6.3 Sobrecarga dos operadores de pré e pós-incremento 6.6.4 Sobrecarga do operador += 7. Conversão de classes 7.1 Método construtor de conversão 7.1.1 Sintaxe de um construtor de conversão 7.1.2 Exemplo de conversão com construtor de conversão 7.2 Método conversor ou Função-membro de conversão 7.2.1 Sintaxe de método conversor 7.2.2 Exemplo de conversão com método conversor 7.2.3 Restrições a um método conversor 7.3 Convertendo classes entre si 7.4 Modos de ativar funções de conversão 7.5 Contextos que podem receber um tipo de dado diferente 7.6 Conversões geram objetos temporários 8. Herança 8.1 Herança simples 8.1.1 Membros protected 8.1.2 Sintaxe da declaração de herança simples 8.1.2.1 Modificador de acesso 8.1.2.1.1 Modificador public 8.1.2.1.2 Modificador private 8.1.3 Construtores na herança simples 8.1.3.1 Sintaxe do construtor da classe-derivada 8.1.4 Métodos com nomes idênticos na classe-base e derivada 8.1.5 Exemplos de herança simples 8.1.5.1 Exemplo de herança simples com um nível de especialização 8.1.5.2 Exemplo de herança simples com dois níveis de especialização 8.1.6 Métodos destrutores na herança simples 8.1.7 Criando ponteiros para classes-base e derivadas 8.1.8 Criando referências para classes-base e derivadas 8.2 Herança Múltipla 8.2.1 Sintaxe da declaração de herança múltipla 8.2.2 Construtores na herança múltipla 8.2.2.1 Sintaxe do construtor da classe-derivada 8.2.3 Exemplo de herança múltipla 8.2.4 Métodos destrutores na herança múltipla 8.2.5 Ocorrência de ambig�idades em herança múltipla 8.2.5.1 Ambig�idade com membros homônimos nas classes-base 8.2.5.2 Ambig�idade com dados duplicados para a classe-base 8.2.6 Classe-base virtual 8.2.6.1 Sintaxe da declaração de classe-base virtual 8.2.6.2 Ocorrência da duplicação de membros-de-dado 8.2.6.3 Restrições a uma classe-base virtual 8.2.6.4 Exemplo de classe-base virtual 9. Polimorfismo através de métodos virtuais 9.1 Ligação estática 9.2 Ligação dinâmica 9.3 Métodos virtuais ou funções-membro virtuais 9.3.1 Sintaxe de um método virtual 9.3.2 Restrições a métodos virtuais 9.3.3 Exemplo de utilização de método virtual 9.3.4 Métodos virtuais puros a partir de classes abstratas 9.3.4.1 Sintaxe de método virtual puro 9.3.4.2 Exemplo de utilização de método virtual puro 9.3.5 Métodos destrutores virtuais 10. Fluxos de entrada e saída em C++ 10.1 Local de definição da hierarquia de fluxos 10.2 Hierarquia das classes de entrada/saída 10.3 Descrição de classes stream de maior relevância 10.3.1 Classe ios 10.3.2 Classe istream 10.3.3 Exemplos de utilização das classes ios e istream 10.3.4 Classe ostream 10.3.5 Exemplos de utilização das classes ios e ostream 10.3.5.1 Ajustando e preenchendo campos de exibição 10.3.5.2 Exibindo um número em notação científica 10.3.5.3 Exibindo os formatos ASCII de um número 10.3.5.4 Exibindo o valor ASCII decimal de uma letra 10.3.6 Formatando o fluxo de saída com a iomanip.h 10.3.6.1 Exemplos de formatações utilizando funções de iomanip.h 10.3.6.1.1 Ajustando e preenchendo campos de exibição 10.3.6.1.2 Definindo a precisão das casas decimais 10.4 Sobrecarregando '<<' e '>>' com classes próprias 10.5 Entrada e saída de dados em arquivos 10.5.1 Gravando dados com objetos ofstream 10.5.1.1 Exemplos de gravação de dados com objetos ofstream 10.5.1.1.1 Criando um arquivo no modo default e gravando dados 10.5.1.1.2 Acrescentando dados a um arquivo 10.5.1.2 Fechamento de arquivo 10.5.2 Lendo dados com objetos ifstream 10.5.2.1 Exemplo de leitura de dados de arquivo com ifstream 10.5.3 Inicializando e fechando arquivos com métodos de fstream 10.5.3.1 Exemplo de criação de objeto com fstream 10.5.4 Quantidade de maneiras na abertura de arquivos 10.5.5 Saída de dados de objetos em arquivos 10.5.6 Entrada de dados de objetos a partir de um arquivo 10.5.7 Utilizando write() para gravar saída de dados de objetos 10.5.8 Utilizando read() para ler dados de objetos 10.5.9 Pesquisa em arquivos 11. Templates 7 11.1 Funções templates 11.1.1 Sintaxe de função template 11.1.2 Exemplos de função template 11.1.3 Conversão de tipo com função template 11.1.4 Compilador gera uma cópia da função para cada tipo 11.1.4.1 Comprovando a cópia com a utilização de variável estática 11.2 Classes templates 11.2.1 Sintaxe de classe template 11.2.2 Exemplos de classe template Apêndice A Quais compiladores podem ser utilizados? Exercícios propostos Como receber os exercícios resolvidos via BBS da Lísias O suporte gratuito pelo webSite da Lísias Uma oportunidade para você com a Lísias BIBLIOGRAFIA íNDICE REMISSIVO |