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

Origem: Wikilivros, livros abertos por um mundo aberto.
[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Linha 1: Linha 1:
===Conceitos iniciais===
===Conceitos iniciais===


===Tipos enumerados===
===Tipos enumerados [[Imagem:2de8.png]]===


Um tipo enumerado contem um número finito de valores. Cada valor tem um nome que o identifica. Por exemplo a seguinte definição:
Um tipo enumerado contem um número finito de valores. Cada valor tem um nome que o identifica. Por exemplo a seguinte definição:

Revisão das 19h16min de 31 de julho de 2007

Conceitos iniciais

Tipos enumerados Ficheiro:2de8.png

Um tipo enumerado contem um número finito de valores. Cada valor tem um nome que o identifica. Por exemplo a seguinte definição:

enum Ecor {vermelho, azul, amarelo};

introduz um tipo enumerado, que possui como rótulo Ecor, e três enumeradores, que são valores inteiros constantes com identificadores vermelho, azul, amarelo.

Em seguida, podemos declarar e utilizar variáveis com esse tipo, e os valores que foram introduzidos na operação podem também aparecer no programa, onde serão consideradas como valores inteiros. Segue um trecho de programa que utiliza a definição acima:

void imprime_cor_em_ingles (enum Ecor c)
{
  switch (c1) {
    case vermelho:
      printf("red");
      break;
    case azul:
      printf("blue");
      break;
    case vermelho:
      printf("amarelo");
      break;
  }
}

Afirmamos que um valor inteiro é associado a cada valor de uma enumeração. Podemos realizar essa associação de forma implícita ou explícita. A forma explícita é realizada associando o número inteiro na definição da enumeração, como demostrado no seguinte exemplo:

enum Edirecao { norte = 0; oeste = 90; sul = 180; leste = 270 };

Caso não aparece associação explícita, a associação é realizada de maneira implícita, utilizando as seguintes regras: o primeiro valor da enumeração recebe o valor zero, e um valor que não está na primeira posição é associado com a soma de um com o inteiro associado ao valor anterior.

Finalmente, podemos também misturar as associações explícitas e implícitas, como no seguinte exemplo:

enum Ecodigo { NO_ERROR = 0; IO_ERROR = 10; FORMAT_ERROR; TIMEOUT_ERROR };

Nesse exemplo, FORMAT_ERROR e TIMEOUT_ERROR denotam respectivamente os inteiros e .

Com relação ao sistema de tipos de Objective Caml, os tipos enumerados podem ser relacionados com tipos variantes onde as alternativas devem ser todas constantes.

Tipos arranjos

Tipos registros

Um tipo em c++ é parecido com o tipo registro em ocaml e sua sintaxe è:

struct NOME {
 Corpo
 };

Onde NOME é o nome do tipo a ser criado e Corpo será oque ele deverá armazenar exemplo:

struct ponto {
 int x;
 int y;
 }

Isso criaria um tipo ponto que armazanaria 2 valores inteiros e equivaleria ao seguinte codigo escrito em ocaml:

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.

Tipos ponteiros

Tipos referências

Tipos uniões

Tipos funções