1 / 17

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;

callie
Download Presentation

Objectos: Introdução

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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. Curso C++ (J. Seixas)

  2. Acesso a todos Acesso só à classe Não esquecer o ;! Forward declaration Construtor Member functions Data members Primeiro 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; }; Curso C++ (J. Seixas)

  3. Primeiro 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; }; Curso C++ (J. Seixas)

  4. Primeiro 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; } Curso C++ (J. Seixas)

  5. Primeiro 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; } Curso C++ (J. Seixas)

  6. Primeiro exemplo: classe node • Compilação : g++ -o node node.cpp main.cpp • Resultado: $ ./node.exe Introduza as coordenadas do nodo: 2 3 Introduza o tamanho da rede (Nx Ny): 10 10 Posicao sequencial: 32 Coordenada x do nodo: 2 Coordenada y do nodo: 3 Curso C++ (J. Seixas)

  7. Primeiro 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; } Curso C++ (J. Seixas)

  8. Primeiro exemplo: classe node • O que significa privado ao nível do compilador: $ g++ -o node main.cpp node.cpp main.cpp: In function `int main(int, char**)': node.h:20: error: `coord node::xCoord' is private main.cpp:19: error: within this context Curso C++ (J. Seixas)

  9. Primeiro 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; } Curso C++ (J. Seixas)

  10. Primeiro 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 3 Introduza as coordenadas do nodo 2: 4 5 Coordenada x do nodo 1: 2 Coordenada y do nodo 1: 3 Coordenada x do nodo 2: 4 Coordenada y do nodo 2: 5 Curso C++ (J. Seixas)

  11. Primeiro 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; }; Curso C++ (J. Seixas)

  12. Primeiro 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; } Curso C++ (J. Seixas)

  13. Primeiro 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; } Curso C++ (J. Seixas)

  14. Primeiro exemplo: classe node • As funções get e set (resultado): Introduza as coordenadas do nodo 1: 1 2 Introduza as coordenadas do nodo 2: 2 3 Coordenada x do nodo 1: 1 Coordenada y do nodo 1: 2 Coordenada x do nodo 2: 2 Coordenada y do nodo 2: 3 Curso C++ (J. Seixas)

  15. Funçõ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: Curso C++ (J. Seixas)

  16. Funçõ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! } Curso C++ (J. Seixas)

  17. Funçõ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) { ... } Curso C++ (J. Seixas)

More Related