De Objective Caml para C e C++/Construção de tipos: diferenças entre revisões

[edição não verificada][edição não verificada]
===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.
Um tipo em c++ é parecido com o tipo registro em ocaml e sua sintaxe è:
 
Considere o seguinte tipo registro (em OCaml):
struct NOME {
type pontopoint = { x : intfloat ; y : intfloat };;
Corpo
};
 
Em C/C++, o equivalente é
Onde NOME é o nome do tipo a ser criado e Corpo será oque ele deverá armazenar exemplo:
typedef struct NOMESponto {
int float x;
int float y;
} 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:
struct ponto {
#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.
Isso criaria um tipo ponto que armazanaria 2 valores inteiros e equivaleria ao seguinte codigo escrito em ocaml:
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 };;
 
E para acessar os campos é a mesma coisa que em ocaml nome do tipo seguido do campo exemplo :
 
ponto a;
a.x = 3;
a.y = 4;
Isso faria uma varivel a do tipo ponto com x = 3 e y = 4.
 
===Ponteiros [[Imagem:3de8.png]]===
187

edições