C++ - Classes e Objetos

Documentos relacionados
C++ - Sobrecarga de Operadores

C++ - Ponteiros (continuação) cout << \nquantas notas? ; cin >> tamanho; notas = new int[tamanho]; //aloca memória

Programação Orientada a Objetos Aula I Declaração de classes, métodos construtores. Prof.: Bruno E. G. Gomes IFRN

Técnicas de Programação:

C++ - Funções. Forma geral das funções C++

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

Aula 26: Estruturas heterogêneas

Estrutura de dados 1. Ponteiros

C++ - Matrizes. Observ.: C++ não avisa quando o limite de uma matriz foi excedido. Providenciar a verificação é responsabilidade do programador.

Fundamentos de Programação. Linguagem C++ aula II - Variáveis e constantes. Prof.: Bruno Gomes

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

C++ - Funções Virtuais (Polimorfismo) Base. Deriv0 Deriv1 Deriv2. print( ) print( ) print( ) dv0 dv1 dv2. p[0] = &dv0; p[1] = &dv1; p[2] = &dv2;

Linguagem de Programação II Implementação

ORIENTAÇÃO A OBJETOS SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Linguagem de Programação III

Funções. definição, declaração e chamada

Programação científica C++

Fábio da Fontoura Beltrão Felipe Augusto Chies Lucas Fialho Zawacki Marcos Vinicius Cavinato Matheus de Carvalho Proença

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Linguagem C Princípios Básicos (parte 1)

Tipos de Dados, Variáveis e Entrada e Saída em C. DCC 120 Laboratório de Programação

Programação I Funções. Prof. Carlos Alberto

Aula 25: Alocação Dinâmica

INF 1620 P1-13/09/02 Questão 1 Nome:

Algoritmos e Programação 2. Objetos e Classes em Java. Classes. Revisão. Definições de classes incluem (geralmente):

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

PCS Laboratório de Programação Orientada a Objetos 1a. Prova. 02 de Setembro de 2015

Aula 27: Estruturas heterogêneas e alocação dinâmica

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

Algoritmos e Programação

Linguagem de Programação Orientada a Objeto Construtores e Sobrecarga

Classes e Encapsulamento

Funções em Linguagem C Parte II

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Introdução a Programação. Tipos Estruturados de Dados

Módulo 1. Introdução. AEDS I C++ (Rone Ilídio)

Linguagem de Programação C++

LINGUAGEM C: FUNÇÕES FUNÇÃO 04/07/2017. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

C++ - Herança. Herança é o processo pelo qual criamos novas classes, chamadas classes derivadas, baseadas em classes existentes ou classes-base.

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Estruturas em C

ORIENTAÇÃO A OBJETOS SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Instituto de Informática Estrutura de Dados II

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Implementando classes em C# Curso Técnico Integrado em Informática Fundamentos de Programação

Programação Orientada a Objetos. Aula 1.9 this e static. Prof. Bruno Moreno

13/11/15. Incrementando C: C++ E na especificação de BigInt... Arquitetura da solução exemplo. O arquivo de declarações. Explorando a classe BigInt

12. SOBRECARGA DE OPERADOR

Análise de Programação

Introdução a classes e objetos. Copyright 2006 by Pearson Education

Linguagem de Programação C. Vetores

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Programação Orientada a Objetos para Redes de Computadores

Programação Orientada a Objetos para Redes de Computadores. Empacotador de Pré-processador. Empacotador de. Primeiro Exemplo Usando Classes em C++

Computação eletrônica: Funções

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Aula 18: Vetores Introdução a Programação Túlio Toffolo & Puca Huachi

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

Dados armazenados em um objeto podem ser tanto primitivos, tais como inteiros ou caracteres, ou referências para outros objetos.

Estruturas de Dados. Módulo 4 Funções. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Algoritmos e Estruturas de Dados I. Universidade Federal de São João del-rei Pedro Mitsuo Shiroma Sala 119 Bloco 3

Algoritmos II prof. Daniel Oliveira

Classes, Métodos e Propriedades

Programação Avançada C++ Slide 12 Nielsen Castelo Damasceno

Métodos Computacionais

Física Computacional 7 Classes

Computação Eletrônica. Tipos de dados, constantes, variáveis, operadores e expressões. Prof: Luciano Barbosa

# Estrutura de Dados # Aula - Revisão de C/C++ na Prática. Prof. Leinylson Fontinele Pereira

Puca Huachi Vaz Penna / José Américo T. Messias

Classes e Objetos. Sintaxe de classe em Java

Programação Orientada a Objetos CLASSES E OBJETOS

Computação Eletrônica. Vetores e Matrizes. Prof: Luciano Barbosa. CIn.ufpe.br

Classes e Objetos. Prof. Leonardo Barreto Campos 1

Introdução à Programação. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Modularidade - Funções e Procedimentos

LINGUAGEM DE PROGRAMAÇÃO C AULA 2. Professor: Rodrigo Rocha

Parte IV. Linguagens de Programação. Relembrando da Última Aula... Empacotador de Préprocessadores. Primeiro Exemplo Usando Classes em C++

Linguagens de Programação

Programação com Objectos. Processamento de Dados I. 2. Classes, Atributos e Métodos

A Linguagem C. A forma de um programa em C

Introdução à Programação

Introdução. Atributos em Java. Atributos. Acesso à atributos em Java. Atributo versus variável. Atributos, métodos e encapsulamento.

Introdução à Linguagem C

Declarações. Tipos de Acesso, Inicialização e Constantes

Aula 6 POO 1 Construtores. Profa. Elaine Faria UFU

1. Revisão de Vetores, Ponteiros, Funções e Estruturas em C

#include <stdio.h> #define nl 3 #define nc 4 main () { int matriz[nl][nc],*p,i; for (i=0, p=&matriz[0][0];i<nl*nc;i++) *(p++)=i+1; for (i=0,

LINGUAGEM DE PROGRAMAÇÃO C++ CLASSES E OBJETOS

Programação Orientada a Objetos. Métodos e Atributos. Métodos. Métodos. Alexandre César Muniz de Oliveira. Parte III

Programação Orientada a Objetos para Redes de Computadores. Arrays. Arrays

Programação Orientada a Objetos

Namespaces, Classes e Métodos.

Aula 24: Ponteiros e Alocação Dinâmica

1.Quais serão os valores de x, y e p ao final do trecho de código abaixo? int x, y, *p;y = 0; p = &y; x = *p; x = 4; (*p)++; --x; (*p) += x;

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

Estrutura de Dados. Cadeia de Caracteres. Roberto Araujo Ago/2013

Aula 15: Introdução a Funções

PROGRAMAÇÃO ORIENTADA A OBJETOS: OCULTAR INFORMAÇÕES E ENCAPSULAMENTO

Programação C/C++ Slide 5 Nielsen Castelo Damasceno

Estrutura de dados 2. Ponteiro. Prof. Jesuliana N. Ulysses

Programação Orientada a Objetos para Redes de Computadores

Transcrição:

C++ - Classes e Objetos Classe : Tipo que combina os dados e as funções para operá-los. Objeto : variável de uma classe. Partes dados-membro ou variáveis de instância funções-membro ou métodos Definição : Através de um exemplo de classe para conter os dados de um retângulo, calcular e imprimir sua área. class Retangulo // definição da classe private : int bas, alt; // dados-membro // funções-membro void init(int b, int h) // inicializa os dados bas = b; alt = h; void printdata( ) // imprime a área cout << \nbase = << bas; cout << \naltura = << alt; cout << \narea = << (bas*alt); ; void main( ) Retangulo x; // declaração do objeto x.init(5,3); /*chama função-membro que inicializa x.printdata( ); os dados (envio de mensagem) */ /* chama função-membro que imprime a área do retângulo */ Observ. : Neste exemplo, as funções-membro tem código definido dentro da classe e são criadas como inline por default. Funções-membro definidas fora da classe : o protótipo deve estar presente no corpo da definição da classe. Ex.: #include <iostream.h> class data

private : int dia, mes, ano; int bissexto( ) // função inline return (ano%4==0 && ano%100 ano%400==0); void initdata(int d, int m, int a); // introduz dados void printdata( ); // imprime por extenso void printsigno( ); // imprime signo void print bissexto( ); // imprime bissexto ; void data :: initdata( int d, int m, int a) int dmes[ ] = 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31; ano = a>0? a : 0; dmes[2] = dmes[2] + bissexto( ); mês = m >=1 && m <=12? m : 0; dia = d >=1 && d <= dmes[mês]? d : 0; void data :: printdata( ) char nome [13][10] = zero, Janeiro, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro ; cout << \n\n <<dia<< de <<nome[mes]<< de <<ano; void data :: printsigno( ) char nsigno[14][12] = zero, Capricórnio, Aquário, Peixes, Aires, Touro, Gêmeos, Câncer, Leão, Virgem, Libra, Escorpião, Sagitário, Capricórnio ; int sig[ ] = 0, 20, 19, 20, 20, 20, 20, 21, 22, 22, 22, 21, 21; if (dia < sig[mes]) cout << \nsigno : << nsigno[mes];

else cout << \nsigno : << nsigno[mes + 1]; void data :: printbissexto( ) if (bissexto( ) ) else cout << \nano bissexto ; cout << \nano não bissexto ; void main( ) data x, y; // declaração dos objetos x.initdata(13, 5, 1999); // introdução de dados y.initdata(25, 12, 2000); x.printdata( ); x.printsigno( ); x.printbissexto( ) //impressão y.printdata( ); y.printsigno( ); y.printbissexto( ) Observ. : Na definição da função-membro fora da classe, o nome da função é precedido pelo nome da classe e pelo símbolo :: (operador de resolução de escopo). Construtor : É uma função-membro que tem o mesmo nome da classe e é executada automaticamente toda vez que um objeto é criado. Ex.: class data data (int d, int m, int a); data :: data (int d, int m, int a) initdata(d, m, a); // Construtor // Sem tipo

data x(13, 5, 1999), y(25, 12, 2000); /* inicialização dos objetos */ Sobrecarga de construtores : class data data (int d, int m, int a); data ( ); // Construtor // Cosnstutor sobrecarregado data :: data ( ) int d, m, a; cout << \ndia : ; cin >> d; cout << \nmes : ; cin >> m; cout << \nano : ; cin >> a; initdata(d, m, a); data x(13, 5, 1999), y ; /* inicialização dos objetos */ Observ. : Na criação do objeto x, será chamado o construtor com argumentos; na criação do objeto y, o construtor sem argumentos. Objetos const : Os membros de dados não podem ser alterados. Ex.: const data natal (25, 12, 1999);

Quando um objeto constante é declarado, o compilador proíbe a ele o acesso a qualquer função-membro, pois não consegue identificar quais funções-membro alteram os seus dados. A palavra const após os parênteses que envolvem a lista de parâmetros da função, indica que a função não modifica o objeto. Desta forma, é possível acessála. Assim a classe data fica: class data private : int dia, mes, ano; int bissexto( ) const return (ano%4==0 && ano%100 ano%400==0); void initdata(int d, int m, int a); void printdata( ) const; void printsigno( ) const; void print bissexto( ) const; ; void data :: printdata( ) const char nome [13][10] = Observ. : É importante declarar nossas funções-membro const sempre que possível. Isto permitirá ao programador utilizar a classe para declarar objetos constantes. Objetos como argumentos de funções-membro : Exemplo : #include <iostream.h> #include <iomanip.h> class venda private : int npecas; float preco; venda ( ) /* construtor sem argumentos e de

corpo vazio (cria objetos sem inicializar) */ venda (int np, float p) // construtor com argumentos npecas = np; preco = p; void getvenda ( ) cout << \nnumero de pecas : ; cin >> npecas; cout << \npreco : ; cin >> preco; void printvenda( ) const; ; void add_venda( venda v1, venda v2) // objeto como arg. npecas = v1.npecas + v2.npecas; preco = v1.preco + v2.preco; void venda :: printvenda( ) cout << setiosflags (ios :: fixed) // não notação científica << setiosflags (ios :: showpoint) // ponto decimal << setprecision (2) // duas casas decimais << setw(10) << npecas; // campo tamanho 10 cout << setw(10) << preco << \n ; venda A(58, 12734.53), B, Total; B.getvenda( ); Total.add_venda(A, B); cout << Venda A.. ; A.printvenda( ); cout << Venda B.. ; B.printvenda( ); cout << Totais.. ; Total.printvenda( ); Observ. : Quando uma função membro é chamada, ela só tem acesso aos dados de um único objeto : o objeto do qual a função é membro. Por isso, para a função

add_venda( ) acessar os membros dos objetos passados como argumento foi necessário o uso do operador ponto ( v1. Pecas, v1.preco). Função que retorna um objeto : Função add_venda( ) modificada class venda venda add_venda (venda v) const; // retorna objeto venda venda :: add_venda(venda v) const venda temp; // variável temporária temp.npecas = npecas + v.npecas; temp.preco = preco + v.preco; return temp; venda A(58, 12734.53), B, Total; B.getvenda( ); Total = A.add_venda( B ); // Total = A + B Dados-membro static : quando um dado-membro é declarado static, é criado um único item para classe como um todo, não importando o número de objetos declarados. A informação de um membro static é compartilhada por todos os objetos da mesma classe. Ex.: Conta objetos criados #include <iostream.h> class Rec private :

; static int n; // dado-membro static Rec ( ) n++; // construtor int getrec( ) const return n; Rec r1, r2, r3; cout << \nnumero de objetos : << r1.getrec( ); cout << \nnumero de objetos : << r2.getrec( ); cout << \nnumero de objetos : << r3.getrec( ); Troque static int n; por int n; e execute novamente. Destrutor : Tem o mesmo nome da classe precedido de um til ~ e é chamado automaticamente toda vez que um objeto é destruído. O destrutor não tem valor de retorno, não pode receber argumentos e nem pode ser chamado explicitamente pelo programador. Ex.: class Rec private : static int n; // dado-membro static Rec ( ) n++; // construtor ~Rec ( ) n // destrutor int getrec( ) const return n; ; void main( ) Rec r1, r2, r3; cout << \nnumero de objetos : << r1.getrec( ); Rec r4, r5; cout << \nnumero de objetos : << r1.getrec( ); cout << \nnumero de objetos : << r1.getrec( ); Membros static públicos : Pode ser acessado em main( ). Ex.:

class moeda private : float RS; public: static float US; // membro static público moeda (float x) RS = x; moeda ( ) cout << \ndigite R$ : ; cin >> RS; float usdolar ( ) return RS/US; ; moeda a(5345.43), b; a.us = 1.60; // acesso a membro static público cout << \nvalor em US$ de a : << a.usdolar ( ); cout << \nvalor em US$ de b : << b.usdolar ( ); outra sintaxe : ; moeda :: US = 1.60; // usando o nome da classe Observ. : Um membro static é criado na definição da classe e existe independente de qualquer objeto. Não pode ser inicializado por um construtor, visto que o construtor é chamado toda vez que um objeto é criado. Funções-membro static : São utilizadas para implementar recursos comuns a todos os objetos. Agem independentemente de qualquer objeto declarado e acessam somente membros static da classe. Ex.: class moeda private : static float US; public: ; ; static float usvalor ( ) // função-membro static cout << \ndigite o valor do dólar : ; cin >> US;

moeda :: usvalor ( ); // chamada em main ( ) Estruturas e Classes : Diferença : os membros de uma classe são privados por default e os de uma estrutura são públicos por default. Observe : class facil equivale class facil private: // sem private int n; int n; void func ( ); void func ( ); ; ; equivale struct facil void func ( ); // membros públicos antes private : int n; ; Matrizes de objetos : Ex.: matriz de objetos venda const MAX = 100; // Número máximo de objetos venda A[MAX]; A[i]. getvenda( ) ; // matriz de objetos /* acesso a função-membro via elemento da matriz */ Inicialização da matriz : através de chamada ao construtor (explícita ou implícita) venda A[MAX] = ; venda (50, 123.50), venda ( ), venda (15, 38.40)

( construtor sem argumentos chamado explicitamente para o segundo elemento e implicitamente para o quarto elemento em diante). Criando um tipo string : Resolvendo o problema de atribuição de uma string a outra (str1 = str2). Criação da classe string. #include <iostream.h> #include <string.h> const MAX = 80; class string private : char str[max]; string( ) str[0] = \0 ; // construtor string vazio string ( char s[ ]) strcpy(str, s); // construtor string ( char ch, int n); // outro construtor int len ( ) const return strlen (str); void print ( ) const cout << str; ; string :: string (char ch, int n) for (int i=0; i<n; i++) str[i] = ch; str[i]= \0 ; string s1( Feliz Aniversário! ), /* forma alternativa : string s1 = Feliz Aniversário! */ s2( =, 18), s3, s4; cout << \ns1 = ; s1.print( ); cout << \ns2 = ; s2.print( ); s3 = Parabéns!! ; cout << \ns3 = ; s3.print( );

s4 = s3; // objeto atribuído a outro cout << \ns4 = ; s4.print( ); Objetos e a alocação de memória : para cada objeto declarado, é reservado espaço um espaço de memória em separado para armazenamento de seus dadosmembro. Entretanto, funções-membro são criadas e colocadas na memória somente uma vez para a classe toda. Exercícios Assunto : Classes e Objetos 1) Crie uma classe para descrever restaurantes. Os membros devem armazenar o nome, o endereço, o preço médio e o tipo de comida. Crie um construtor que inicialize os dados com zero e outro com um valor fixo. Crie uma função membro para solicitar os dados para o usuário, e outra para imprimir os dados de um restaurante. Escreva um programa que crie uma matriz de objetos restaurante e solicite a entrada dos dados pelo usuário. Em seguida o programa pergunta o tipo de comida ao usuário e lista todos os restaurantes que o oferecem. 2) Defina uma classe de nome aluno com dados privados para armazenar o nome do aluno, a matrícula e o curso. Inclua duas funções públicas: uma para solicitar os dados ao usuário, outra para imprimir os dados. Inclua um membro static privado para contar o número de alunos cadastrados, um construtor que incremente o contador de alunos e um destrutor que decremente. Inclua também uma função pública que retorne o número de alunos cadastrados. Escreva um programa que cadastre alunos e imprima o cadastro. 3) Escreva uma classe para descrever um mês do ano. A classe deve ser capaz de armazenar o nome do mês, a abreviação em três letras, o número de dias e o número do mês. Crie um construtor para inicializar os dados com zero e outro com um valor fixo. Escreva uma função-membro que receba o número do mês como argumento e retorne o total de dias do ano até aquele mês. Escreva outra função membro sobrecarregada que receba o nome do mês como argumento e retorne o mesmo total de dias. Prática VI Escreva uma classe para conter três membros do tipo int chamados hora, mins e segs e chame-a de tempo.

a) Crie um construtor que inicialize os dados com zero e outro com um valor fixo. b) Crie uma função-membro para solicitar a hora, os minutos e os segundos para o usuário. c) Crie uma função membro para imprimir a hora no formato hh:mm:ss d) Crie uma função membro para adicionar dois objetos da classe tempo passados como argumentos. e) Crie uma função membro que subtraia duas horas e retorne o número de segundos entre elas. A função recebe dois objetos da classe tempo passados como argumentos. Escreva uma classe que represente um estacionamento. Ela deve armazenar o número da chapa do carro, a marca, a hora de entrada e a hora de saída. Utilize dois membros da classe tempo para hora de entrada e saída. a) Crie uma função membro para solicitar os dados de uma carro para o usuário (utilize as funções da classe tempo para pedir a hora de entrada e saída) b) Crie uma função-membro para imprimir os dados de um carro. c) Admita que o estacionamento cobre R$1,00 a hora. Escreva uma funçãomembro que imprima o valor cobrado. Utilize a função que subtrai duas horas da classe tempo. Escreva um programa que crie uma matriz de objetos da classe anterior, solicite os dados dos carros para o usuário e imprima um relatório dos dados e do valor cobrado.