De Objective Caml para C e C++/Construção de tipos (editar)
Revisão das 23h09min de 22 de agosto de 2007
, 22 de agosto de 2007→Tipos registros
[edição não verificada] | [edição não verificada] |
m (→Tipos uniões) |
|||
===Tipos registros===
Os tipos registros de C/C++ são essencialmente idênticos aos de Objective Caml: é um forma de agregar um número fixo de valores de diferentes tipos. Esses valores são chamados ''campos'' do registro. Cada campo possui um nome que o identifica e um tipo que especifica quais valores ele pode ter. Vamos agora ver a sintaxe em C/C++ através de um exemplo.
Considere o seguinte tipo registro (em OCaml):
struct NOME {▼
Em C/C++, o equivalente é
} point;
Pode-se acessar aos campos utilizando um operador que tem a mesma sintaxe que o de Objective Caml. Assim, caso desejarmos definir uma função que calcula a distância entre dois pontos dados, podemos escrever:
#include <math.h>
▲ int x;
float distance (point p1, point p2)
▲ int y;
{▼
float dx = p1.x - p2.x;
float dy = p1.y - p2.y;
return sqrtf(dx*dx + dy+dy);
}
C/C++ diferem de Objective Caml na forma de denotar valores de um tipo registro. Enquanto que em Objective Caml tem que explicitamente associar a cada nome um valor, em C/C++ essa associação é feita pela posição. Uma outra diferença sútil é que os valores dos diferentes campos devem ser separados por vírgulas (é um ponto e vírgula em Objective Caml). Assim, o exemplo seguinte lembra como pode-se escrever um valor de um tipo registro em Objective Caml.
let origin = { x = 0.0 ; y = 0.0 }
O equivalente em C/C++ seria:
point origin = { 0.0 , 0.0 };
[[[ ADICIONAR UM PARÁGRAFO SOBRE PONTEIROS PARA REGISTROS ]]]
▲ type ponto = { x : int ; y : int };;
===Ponteiros [[Imagem:3de8.png]]===
|