Tipos compostos em C ++ são enumeração, estrutura, união e classes.
O uso de enumeração e estrutura é similar ao uso em linguagem C, exceto por uma pequena diferença: não é necessário repetir a palavra chave (enum e struct, respectivamente) para declarar uma variável deste tipo composto. Por exemplo, se um tipo de enumeração foi previamente declarado como:
enum game_result {win,lose,tie};então uma variável deste tipo pode ser declarada simplesmente como
game_result outcome;ou seja, outcome é uma variável que pode apenas assumir os valores win, lose ou tie.
Uniões em C ++ apresentam ainda outra característica não presente em C: uma união pode ser livre, isto é. não receber um nome. Esta é uma caracterítica prática quando embutindo uniões dentro de estruturas: quando a união tem obrigatoriamente um nome, como exigido em ANSI-C, isto acrescenta um nível extra de indireção. Em C ++, este nível extra não é necessário.
A definição de classes traz o maior potencial de C ++, e este assunto será abordado em mais detalhes adiante. Neste momento, entretanto, é interessante notar que classes podem ser definidas e acessadas praticamente da mesma maneira que estruturas. O exemplo abaixo ilustra estas similaridades através da definição de uma classe muito simples.
indentation
The weight of dog1 is 15 The weight of dog2 is 37 The weight of chicken is 3
Caso animal tivesse sido declarado como uma estrutura, então dog1, dog2, chicken, cat1 e cat2 seriam variáveis de um tipo de estrutura. Como animal é uma classe, então estas variáveis são chamadas de objetos. Embora a diferença possa parecer mínima neste exemplo, ficará claro ao longo deste texto que outras diferenças, muito mais fundamentais, existem.
Observe também o uso da palavra chave public na definição da classe. Ela é necessária porque todas as variáveis em uma classe são, por default, privadas; isto é, elas não poderiam ser acessadas de forma direta como foi feito neste exemplo.