A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Curso C++ (J. Seixas) Objectos: Introdução O objecto ou classe é o conceito base de uma linguagem de programação por objectos como o C++. Tal como acontecia.

Apresentações semelhantes


Apresentação em tema: "Curso C++ (J. Seixas) Objectos: Introdução O objecto ou classe é o conceito base de uma linguagem de programação por objectos como o C++. Tal como acontecia."— Transcrição da apresentação:

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

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

3 Curso C++ (J. Seixas) Primeiro exemplo: classe node Conteúdo do ficheiro node.h #include 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; };

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

5 Curso C++ (J. Seixas) Primeiro exemplo: classe node Conteúdo do ficheiro main.cpp #include #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; }

6 Curso C++ (J. Seixas) 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): Posicao sequencial: 32 Coordenada x do nodo: 2 Coordenada y do nodo: 3

7 Curso C++ (J. Seixas) Primeiro exemplo: classe node O que significa privado ao nível do compilador: #include #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; }

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

9 Curso C++ (J. Seixas) Primeiro exemplo: classe node Cada instância do objecto é uma entidade autónoma com as suas definições próprias: #include #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; }

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

11 Curso C++ (J. Seixas) Primeiro exemplo: classe node As funções get e set (node.h): #include 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; };

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

13 Curso C++ (J. Seixas) Primeiro exemplo: classe node As funções get e set (main.cpp): #include #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; }

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

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

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

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


Carregar ppt "Curso C++ (J. Seixas) Objectos: Introdução O objecto ou classe é o conceito base de uma linguagem de programação por objectos como o C++. Tal como acontecia."

Apresentações semelhantes


Anúncios Google