Especificadores de tipo elaborados
Um especificador de tipo elaborado é um nome de tipo precedido pela palavra-chave class, struct, enum ou union.
class identifier
struct identifier
enum identifier
union identifier
Comentários
Um especificador de tipo elaborado é usado para dar ênfase, ou para revelar um nome de tipo que é ocultado pela declaração de uma variável com o mesmo nome no mesmo escopo.
A instrução a seguir declara o identificador Window como um nome da classe. Essa sintaxe é usada para a declaração de encaminhamento das classes. Para obter mais informações sobre nomes de classes, consulte Nomes de classes.
class Window;
Se um nome é declarado usando a palavra-chave union, ele também deve ser definido usando a palavra-chave union. Os nomes que são definidos usando a palavra-chave class podem ser declarados usando a palavra-chave struct (e vice-versa). Portanto, os exemplos de código a seguir são válidos:
Exemplo
// elaborated_type_specifiers1.cpp
struct A; // Forward declaration of A.
class A // Define A.
{
public:
int i;
};
int main()
{
}
// elaborated_type_specifiers2.cpp
class A; // Forward declaration of A
struct A
{
private:
int i;
};
int main()
{
}
// elaborated_type_specifiers3.cpp
union A; // Forward declaration of A
union A
{
int i;
char ch[2];
};
int main()
{
}
Os exemplos a seguir, no entanto, eles são ilegais:
// elaborated_type_specifiers4.cpp
union A; // Forward declaration of A.
struct A
{ // C2011
int i;
};
// elaborated_type_specifiers5.cpp
union A; // Forward declaration of A.
class A
{ // C2011
public:
int i;
};
// elaborated_type_specifiers6.cpp
struct A; // Forward declaration of A.
union A
{ // C2011
int i;
char ch[2];
};