• Nenhum resultado encontrado

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

N/A
N/A
Protected

Academic year: 2021

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

Copied!
33
0
0

Texto

(1)
(2)

ESTRUTURAS

(3)

ESTRUTURAS

• Cada estrutura (struct) cria um novo tipo

• Dois tipos estruturas de nomes distintos s˜ao diferentes mesmo quando tˆem exatamente os mesmos membros

• Os componentes de uma struct podem ser p´ublicos, privados ou protegidos

(4)

ESTRUTURAS

ESTRUTURAS COM FUNC¸ ˜AO INLINE

struct Date {

int month, day, year;

void display(){ // fun¸c~ao inline

cout << day <<" "<< month <<" "<< year <<" "<< era << "\n"; }

char era; };

int main(int argc, char *argv[]){ Date data = {5, 19, 1948, ’A’}; data.display();

}

Sa´ıda: 19 5 1948 A

c++/rsb 3

(5)

ESTRUTURAS COM FUNC¸ ˜AO N ˜AO-INLINE

struct Date {

int month, day, year; void display();

char era; };

void Date::display(){

cout << day <<" "<< month <<" "<< year <<" "<< era << "\n" ; }

int main(int argc, char *argv[]){ Date data = {5, 19, 1948, ’A’}; data.display();

}

(6)

ESTRUTURAS

INICIAC¸ ˜AO DE ESTRUTURAS

struct Date {

int month, day, year; void display(){

cout << day <<" "<< month <<" "<< year <<" "<< era << "\n" ; }

private:

char era; };

int main(int argc, char *argv[]){ Date data = {5, 19, 1948, ’A’}; data.display();

}

• Mensagem do compilador: ‘data’ must be initialized by constructor, not by ‘...’

c++/rsb 5

(7)

ESTRUTURAS COM CONSTRUTORA

struct Date {

int month, day, year;

Date(int m,int d,int y,char e){month=m;day=d;year=y;era=e;}; void display(){

cout << day <<" "<< month <<" "<< year <<" "<< era << "\n" ; }

private:

char era; };

int main(int argc, char *argv[]){ Date data(5, 19, 1948, ’A’); data.display();

(8)

CLASSES

(9)

CLASSES

• Uma classe consiste em uma estrutura de dados com habilidade para ocultar alguns de seus componentes e membros fun¸c˜oes para

manipular esta estrutura

• Classes servem para definir novos tipos abstratos de dados • Defini¸c˜ao de classes ´e um um molde para fazer objetos

• Membros da classe podem ser: membros de dados, fun¸c˜oes

construtoras, fun¸c˜oes destruidoras e membros fun¸c˜oes (m´etodos) • As opera¸c˜oes da classe s˜ao definidas por membros que s˜ao fun¸c˜oes • Estruturas (struct) s˜ao classes em que membros sem especifica¸c˜ao

de visibilidade s˜ao p´ublicos:

(10)

CLASSES

VISIBILIDADE DOS MEMBROS

• Uma declara¸c˜ao de classe pode conter membros privados (private), protegidos (protected) e p´ublicos (public)

• private: membros declarados como privados somente s˜ao acess´ıveis aos membros funcionais da classe

• public: membros declarados como p´ublicos tˆem a mesma regra de escopo de membros de struct e podem ser referenciados via

qualifica¸c˜ao.

• Membros publics definem a interface da classe

• protected: membros protegidos s˜ao membros privados que s˜ao access´ıveis nas subclasses

• No corpo de fun¸c˜oes membros, todos os membros da classe podem ser referenciados diretamente, sem necessidade de qualifica¸c˜ao

c++/rsb 9

(11)

DEFINIC¸ ˜AO DE UMA CLASSE

class Box{ private:

int h, w, d; public:

Box(int, int, int);

void set(int, int, int); int volume(void);

};

Box::Box(int ht, int wd, int dp) { h = ht; w = wd; d = dp;

}

(12)

CLASSES

APLICAC¸ ˜AO DA CLASSE Box

int main(){

// declara um cubo

Box thisBox(4, 5, 2);

Box* otherBox = new Box(1, 2, 3); // calculo & exibicao de volume

cout << thisBox.volume() << " " << otherBox->volume(); return 0;

}

c++/rsb 11

(13)

DECLARAC¸ ˜AO DE OBJETOS

• No momento da declara¸c˜ao dos objetos, mem´oria para os membros ´

e alocada, e a fun¸c˜ao construtora ´e chamada.

• A declara¸c˜ao de objetos pode ter parˆametros de inicializa¸c˜ao, e.g.: – Box thisBox(7, 8, 9) ;

– Box otherBox = Box(7, 8, 9);

(14)

CLASSES

PALAVRA CHAVE this

class Box{

int h, w, d; public:

Box(int, int, int);

void set(int, int, int); int volume(void);

};

Box::Box(int ht, int wd, int dp) {

this->h = ht; this->w = wd; this-> = dp; }

int Box::set(int a,int b,int c){this->h=a;this->w=b;this->d=c;} int Box::volume(){

return this->h * this->w * this->d; }

c++/rsb 13

(15)

APONTADOR this

• this ´e um apontador especial que existe em toda fun¸c˜ao n˜ao-est´atica membro de classe

• this aponta para o objeto para o qual a funcao membro est´a sendo executada

• this ´e um parˆametro formal que sempre corresponde ao objeto corrente

• Quando uma fun¸c˜ao membro ´e chamada, this recebe automaticamente o endere¸co do objeto correspondente

• Toda referˆencia a membro de dados feita a partir de uma fun¸c˜ao membro usa implicitamente o operador this

(16)

CLASSES

IMPLEMENTAC¸ ˜AO DO this

• this tem tipo X*, onde X ´e a classe correspondente • this n˜ao pode ser modificado

• A fun¸c˜ao Box::volume() ´e compilada como: int volume(Box* const this){

return this->height * this->width * this->depth; }

int main(){

Box thisBox(4, 5, 2);

Box* otherBox = new Box(1, 2, 3);

... thisBox.volume(); // volume(&thisBox); ... otherBox->volume(); // volume(otherBox); ...

}

c++/rsb 15

(17)

MEMBROS DE CLASSE EST ´ATICOS

• Membro de classe pode ser definido como static

• Um membro est´atico ´e comum a todos os objetos da classe, havendo sempre apenas uma instˆancia do membro, que ´e

compartilhado por todos os objetos da classe

• O membro est´atico (dado ou fun¸c˜ao) deve ser anunciado na classe e definido fora dela para que passe a existir

• Membros est´aticos obedecem `as regras de escopo usuais para qualquer membro de classe

• Fun¸c˜ao membro est´atica s´o pode ter acesso a outros membros est´aticos da classe

(18)

CLASSES

MEMBROS DE CLASSE EST ´ATICOS...

class List {

static List *minhaLista; <== declara¸c~ao ...

public:

static void display(); <== declara¸c~ao ...

};

List *List::minhaLista; <=== defini¸c~ao

List *List::display( ){ ... }; <=== defini¸c~ao ...

c++/rsb 17

(19)

EXECUC¸ ˜AO DE MEMBRO EST ´ATICO SEM OBJETO

class Date {

int mo, da, yr; public:

static int format; // 1 = mm/dd/yy, 2 = dd/mm/yy

Date(int m , int d, int y){ mo = m; da = d; yr = y; } void display();

};

int Date::format;

void Date::display() {

if (format == 1)cout << mo << ’/’ << da; else cout << da << ’/’ << mo;

(20)

CLASSES

EXECUC¸ ˜AO DE MEMBRO EST ´ATICO SEM OBJETO...

(21)

FUNC¸ ˜AO CONSTRUTORA

• Tem o mesmo nome da classe e n˜ao tem tipo de retorno

• ´E opcional. Neste caso, declara¸c˜oes de objetos n˜ao implicam em chamadas de fun¸c˜oes construtoras

• Pode haver mais de uma fun¸c˜ao construtora por classe, via overloading

(22)

CLASSES

CONSTRUTORA DEFAULT

int n = 0; class Par {

int ordem; int nota; public:

Par(int ordem = 1, int nota = 10 ){

this->ordem = ordem; this->nota = nota; n++; }

int f( ){return ordem;} int g( ){return nota;} };

int main(int argc, char *argv[]) {

Par x(1,10); Par t; Par s(1); Par r[10];

Par u(1,10)[10]; //Erro:n~ao se aceitam par^ametros aqui!

printf("%d %d % d\n", n, r[9].f(), r[9].g());// Sa´ıda:13 1 10 }

c++/rsb 21

(23)

FUNC¸ ˜AO CONSTRUTORA PRIVADA

(24)

CLASSES

FUNC¸ ˜AO DESTRUIDORA

• Tem sempre o nome da classe prefixada por ˜ • No m´aximo uma por classe

• N˜ao tem parˆametro e nada retorna

• Chamada implicitamente quando objeto da classe sai do escopo, isto ´

e, no momento retorno de fun¸c˜oes ou pelo uso do operador delete

c++/rsb 23

(25)

TEMPO DE VIDA DE OBJETOS

• Objeto autom´atico ´e alocado quando sua declara¸c˜ao ´e encontrada e liberado quando se sai do bloco que a cont´em

• Objetos criados pelo operador new existem at´e que sejam destru´ıdos pelo delete

• O endere¸co retornado pelo new deve ser passado ao delete

(26)

CLASSES

CONSTRUTORA/DESTRUIDORA E FREE STORE

• new chama a construtora • delete chama a destruidora class Date{

int mo, da, yr; public:

Date(); ~Date(); };

Date::Date(){cout << "\n Funcao construtora DATE ";} Date::~Date(){cout << "\n Funcao destruidora DATE";}

c++/rsb 25

(27)

CONSTRUTORA/DESTRUIDORA E FREE ...

int main(){

Date *dt = new Date;

cout << "\nProcessa as datas "; delete dt;

return 0; }

SAIDA:

Funcao construtora Date Processa as datas

(28)

CLASSES

FUNC¸ ˜OES DESTRUIDORAS E FREE STORE

class Date {

int mo, da, yr; char *month; // default: private public:

Date();

Date(int m, int d, int y); ~Date();

void display(); };

void Date::display() {

if (month != NULL)

cout << ’\n’ << month << ’ ’ << da << ", " << yr; }

c++/rsb 27

(29)

FUNC¸ ˜OES DESTRUIDORAS E FREE STORE ...

Date::Date(){ mo = 0; da = 0; yr = 0; month = NULL; } Date::Date(int m, int d, int y) {

static char *mes[] = {

"Janeiro","Fevereiro","Mar¸co","Abril","Maio", "Junho","Julho","Agosto","Setembro",

"Outubro", "Novembro","Dezembro"}; mo = m; da = d; yr = y;

month = new char[strlen(mes[m-1])+1]; strcpy(month, mes[m-1]);

}

Date::~Date() {if (month != NULL) delete month;} int main() {

(30)

CLASSES

FUNC¸ ˜AO MEMBRO CONSTANTE

class A { int x; public:

A(){x = 10;}

void setX(int x) { this->x = x;}

int getX( ) const {return ++x;} //ERRO };

(31)

FUNC¸ ˜AO MEMBRO CONSTANTE ...

class A { int x; public:

A(){x = 10;}

void setX(int x) { this->x = x;}

int getX( ) const {return x;} // OK };

int main(int argc, char *argv[]){ A a;

printf("a.x = %d ", a.getX()); const A c;

(32)

CLASSES OBJETO CONSTANTE class A { int x; public: A() {x = 10; }

void setX(int x) { this->x = x;} int getX( ) const {return x;}

};

(33)

Referências

Documentos relacionados

Pensando no público que freqüenta o Programa Integrado para a Terceira Idade da Unijuí, realizamos uma recente avaliação física para avaliar os níveis de

[r]

Ebert Daniel M35-39 Eintracht Frankfurt Triathlon DEU (Germany). Ewald Björn M35-39

CARATERÍSTICAS -Cerda pura grey -Virola niquelada -Cabo plástico (Polipropileno) SUPERFÍCIES A TRATAR Cimento, betão reboco e outras superfícies, metais, madeira e

h) Não se aplica o disposto neste item à cota reservada as microempresas, empresas de pequeno porte. 10.12 O encerramento da fase competitiva dar-se-á quando,

Esses conflitos de classe na formação social capitalista nos permitiram identificar três grandes momentos nos quais o ordenamento mundial capitalista respondeu a diversos

Esta dicotomia, quando reproduzida em nosso campo configura-se como a oposição entre alma/paixão de um lado e corpo/loucura de outro e pode produzir o equívoco de se postular

Algumas sementes e castanhas vão ficar só nessa etapa de hidratação pois já passaram por um processo térmico no caso de algumas castanhas e nozes, outras sementes descascadas