objectos: introdução

17
Curso C++ (J. Seixas) Objectos: Introdução Objectos: Introdução O objecto ou classe é o conceito base de uma linguagem de programação por objectos como o C++. Tal como acontecia com as estruturas, um objecto define um novo tipo. Para criar um novo objecto usa-se a declaração class: class myObject; Criamos assim o objecto (tipo) myObject, que não está todavia ainda definido.

Upload: callie

Post on 11-Jan-2016

29 views

Category:

Documents


0 download

DESCRIPTION

Objectos: Introdução. O objecto ou classe é o conceito base de uma linguagem de programação por objectos como o C++. Tal como acontecia com as estruturas, um objecto define um novo tipo. Para criar um novo objecto usa-se a declaração class: class myObject; - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Objectos: Introdução

Curso C++ (J. Seixas)

Objectos: IntroduçãoObjectos: Introdução

O objecto ou classe é o conceito base de uma linguagem de programação por objectos como o C++.

Tal como acontecia com as estruturas, um objecto define um novo tipo.

Para criar um novo objecto usa-se a declaração class:

class myObject;

Criamos assim o objecto (tipo) myObject, que não está todavia ainda definido.

Page 2: Objectos: Introdução

Curso C++ (J. Seixas)

Primeiro exemplo: classe nodePrimeiro exemplo: classe node

Vamos criar uma classe representando um ponto de uma rede (node)typedef long coord;typedef long seq;typedef double dist;class row;class node {public: node(); node(coord x, coord y); dist getDistance(node myNode); dist getDistance(row myRow); coord getXCoord(); coord getYCoord(); private: coord xCoord; coord yCoord;

};

Member functions

Data members

Acesso a todos

Acesso só à classe

Não esquecer o ;!

Forward declaration

Construtor

Page 3: Objectos: Introdução

Curso C++ (J. Seixas)

Primeiro exemplo: classe nodePrimeiro exemplo: classe node

Conteúdo do ficheiro node.h#include <iostream>

using namespace std;

typedef long coord;typedef long seq;typedef double dist;

class row;

class node {public: node(); node(coord x, coord y); dist getDistance(node myNode); dist getDistance(row myRow); coord getXCoord(); coord getYCoord(); private: coord xCoord; coord yCoord;};

Page 4: Objectos: Introdução

Curso C++ (J. Seixas)

Primeiro exemplo: classe nodePrimeiro exemplo: classe node

Conteúdo do ficheiro node.cpp#include "node.h"

using namespace std;

node::node(){}node::node(coord x, coord y){ xCoord = x; yCoord = y;}coord node::getXCoord(){ return xCoord;}coord node::getYCoord(){ return yCoord;}

Page 5: Objectos: Introdução

Curso C++ (J. Seixas)

Primeiro exemplo: classe nodePrimeiro exemplo: classe node

Conteúdo do ficheiro main.cpp#include <iostream>#include "node.h"

using namespace std;

int main(int argc, char *argv[]){ node origin(0,0); coord x,y; seq Nx, Ny; cout << "Introduza as coordenadas do nodo: "; cin >> x >> y; node point2D(x,y); cout << "Introduza o tamanho da rede (Nx Ny): "; cin >> Nx >> Ny; seq seqNodePosition=y*Nx+x; // start at 0! cout << "Posicao sequencial: " << seqNodePosition << endl; cout << "Coordenada x do nodo: " << point2D.getXCoord() << endl; cout << "Coordenada x do nodo: " << point2D.xCoord << endl; cout << "Coordenada y do nodo: " << point2D.getYCoord() << endl;

return 0;}

Page 6: Objectos: Introdução

Curso C++ (J. Seixas)

Primeiro exemplo: classe nodePrimeiro exemplo: classe node

Compilação : g++ -o node node.cpp main.cpp

Resultado:$ ./node.exeIntroduza as coordenadas do nodo: 2 3Introduza o tamanho da rede (Nx Ny): 10 10Posicao sequencial: 32Coordenada x do nodo: 2Coordenada y do nodo: 3

Page 7: Objectos: Introdução

Curso C++ (J. Seixas)

Primeiro exemplo: classe nodePrimeiro exemplo: classe node

O que significa privado ao nível do compilador:#include <iostream>#include "node.h"

using namespace std;

int main(int argc, char *argv[]){ node origin(0,0); coord x,y; seq Nx, Ny; cout << "Introduza as coordenadas do nodo: "; cin >> x >> y; node point2D(x,y); cout << "Introduza o tamanho da rede (Nx Ny): "; cin >> Nx >> Ny; seq seqNodePosition=y*Nx+x; // start at 0! cout << "Posicao sequencial: " << seqNodePosition << endl; cout << "Coordenada x do nodo: " << point2D.getXCoord() << endl; cout << "Coordenada x do nodo: " << point2D.xCoord << endl; cout << "Coordenada y do nodo: " << point2D.getYCoord() << endl;

return 0;}

Page 8: Objectos: Introdução

Curso C++ (J. Seixas)

Primeiro exemplo: classe nodePrimeiro exemplo: classe node

O que significa privado ao nível do compilador:

$ g++ -o node main.cpp node.cppmain.cpp: In function `int main(int, char**)':node.h:20: error: `coord node::xCoord' is privatemain.cpp:19: error: within this context

Page 9: Objectos: Introdução

Curso C++ (J. Seixas)

Primeiro exemplo: classe nodePrimeiro exemplo: classe node

Cada instância do objecto é uma entidade autónoma com as suas definições próprias:

#include <iostream>#include "node.h"

using namespace std;

int main(int argc, char *argv[]){ node origin(0,0); coord x,y,w,z; seq Nx, Ny; cout << "Introduza as coordenadas do nodo 1: "; cin >> x >> y; node point2D1(x,y); cout << "Introduza as coordenadas do nodo 2: "; cin >> w >> z; node point2D2(w,z); cout << "Coordenada x do nodo 1: " << point2D1.getXCoord() << endl; cout << "Coordenada y do nodo 1: " << point2D1.getYCoord() << endl; cout << "Coordenada x do nodo 2: " << point2D2.getXCoord() << endl; cout << "Coordenada y do nodo 2: " << point2D2.getYCoord() << endl;

return 0;}

Page 10: Objectos: Introdução

Curso C++ (J. Seixas)

Primeiro exemplo: classe nodePrimeiro exemplo: classe node

Cada instância do objecto é uma entidade autónoma com as suas definições próprias:

Introduza as coordenadas do nodo 1: 2 3Introduza as coordenadas do nodo 2: 4 5Coordenada x do nodo 1: 2Coordenada y do nodo 1: 3Coordenada x do nodo 2: 4Coordenada y do nodo 2: 5

Page 11: Objectos: Introdução

Curso C++ (J. Seixas)

Primeiro exemplo: classe nodePrimeiro exemplo: classe node

As funções get e set (node.h):#include <iostream>

using namespace std;

typedef long coord;typedef long seq;typedef double dist;

class row;

class node {public: node(); node(coord x, coord y); dist getDistance(node myNode); dist getDistance(row myRow); coord getXCoord(); coord getYCoord(); void setXCoord( coord x ); void setYCoord( coord y ); void setCoordinates( coord x , coord y); private: coord xCoord; coord yCoord;};

Page 12: Objectos: Introdução

Curso C++ (J. Seixas)

Primeiro exemplo: classe nodePrimeiro exemplo: classe node

As funções get e set (node.cpp):#include "node.h"

using namespace std;

node::node(){}node::node(coord x, coord y){ xCoord = x; yCoord = y;}coord node::getXCoord(){ return xCoord;}coord node::getYCoord(){ return yCoord;}void node::setXCoord( coord x ){ xCoord=x;}void node::setYCoord( coord y ){ yCoord=y;}void node::setCoordinates( coord x , coord y){ xCoord=x; yCoord=y;}

Page 13: Objectos: Introdução

Curso C++ (J. Seixas)

Primeiro exemplo: classe nodePrimeiro exemplo: classe node

As funções get e set (main.cpp):#include <iostream>#include "node.h"

using namespace std;

int main(int argc, char *argv[]){ node origin(0,0); coord x,y,w,z; seq Nx, Ny; cout << "Introduza as coordenadas do nodo 1: "; cin >> x >> y; node point2D1; point2D1.setXCoord(x); point2D1.setYCoord(y); cout << "Introduza as coordenadas do nodo 2: "; cin >> w >> z; node point2D2; point2D2.setCoordinates(w,z); cout << "Coordenada x do nodo 1: " << point2D1.getXCoord() << endl; cout << "Coordenada y do nodo 1: " << point2D1.getYCoord() << endl; cout << "Coordenada x do nodo 2: " << point2D2.getXCoord() << endl; cout << "Coordenada y do nodo 2: " << point2D2.getYCoord() << endl;

return 0;}

Page 14: Objectos: Introdução

Curso C++ (J. Seixas)

Primeiro exemplo: classe nodePrimeiro exemplo: classe node

As funções get e set (resultado):Introduza as coordenadas do nodo 1: 1 2Introduza as coordenadas do nodo 2: 2 3Coordenada x do nodo 1: 1Coordenada y do nodo 1: 2Coordenada x do nodo 2: 2Coordenada y do nodo 2: 3

Page 15: Objectos: Introdução

Curso C++ (J. Seixas)

Funções inlineFunções inline

Em C++ para além de macros temos funções inline. Chamar uma função inline é semanticamente equivalente a chamar uma função normal, só que mais rápido.

Porquê usar funções inline se temos também macros? Vejamos um exemplo:

Page 16: Objectos: Introdução

Curso C++ (J. Seixas)

Funções inlineFunções inline// A macro that returns the absolute value of i #define unsafe(i) \ ( (i) >= 0 ? (i) : -(i) ) // An inline function that returns the absolute value of i inline int safe(int i) { return i >= 0 ? i : -i; } int f(); void userCode(int x) { int ans; ans = unsafe(x++); // Error! ans = unsafe(f()); // Danger! ans = safe(x++); // Correct! ans = safe(f()); // Correct! }

Page 17: Objectos: Introdução

Curso C++ (J. Seixas)

Funções inlineFunções inline

Como se declaram inline funções membro:No header file:

 class myClass { public:   void f(int i, char c); };

No ficheiro de definição cpp:Inline void myClass::f(int i, char c)

{

...

}