Compartilhar via


abstrata (Extensões de Componentes C++)

A palavra-chave abstract declara:

  • Um tipo pode ser usado como um tipo base, mas o próprio tipo não pode ser instanciado.

  • Uma função de membro de tipo só pode ser definida em um tipo derivado.

Todas as Plataformas

Sintaxe

class-declaration class-identifier abstract {}
virtual return-type member-function-identifier() abstract ;

Comentários

A primeira sintaxe de exemplo declara uma classe como abstrata.O componente declaração de classe pode ser uma declaração de C++ nativa (class ou struct), ou uma declaração de extensão de C++ (ref class ou ref struct) se a opção de compilador /ZW ou /clr for especificada.

A segunda sintaxe de exemplo declara uma função de membro virtual como abstrata.Declarar um resumo de função é o mesmo que declará-la como uma função virtual pura.Declarar um resumo de função de membro também faz com que a classe delimitadora seja declarada como abstrata.

A palavra-chave abstract tem suporte em código nativo e específico da plataforma; isto é, pode ser compilado com ou sem a opção de compilador /ZW ou /clr.

Você pode detectar em tempo de compilação se um tipo é abstrato com a característica do tipo __is_abstract(type).Para obter mais informações, consulte Suporte para Compilador de Traços de Tipo (Extensões de Componentes C++).

A palavra-chave abstract é um um especificador de substituição sensível ao contexto.Para obter mais informações sobre palavras-chave sensíveis ao contexto, consulte Palavras-chave Contextuais (Extensões de Componentes C++).Para obter mais informações sobre os especificadores de substituição, consulte Como declarar especificadores de substituição em compilações nativas.

Tempo de Execução do Windows

Para obter mais informações, consulte Classes e estruturas de referência.

b0z6b513.collapse_all(pt-br,VS.110).gifRequisitos

Opção do compilador: /ZW

Common Language Runtime

b0z6b513.collapse_all(pt-br,VS.110).gifRequisitos

Opção do compilador: /clr

b0z6b513.collapse_all(pt-br,VS.110).gifExemplos

Exemplo

O exemplo de código a seguir gera um erro porque a classe X está marcada como abstract.

// abstract_keyword.cpp
// compile with: /clr
ref class X abstract {
public:
   virtual void f() {}
};

int main() {
   X ^ MyX = gcnew X;   // C3622
}

Exemplo

O exemplo de código a seguir gera um erro porque instancia uma classe nativa marcada como abstract.Este erro ocorrerá com ou sem a opção de compilador /clr.

// abstract_keyword_2.cpp
class X abstract {
public:
   virtual void f() {}
};

int main() {
   X * MyX = new X; // C3622: 'X': a class declared as 'abstract'
                    // cannot be instantiated. See declaration of 'X'}

Exemplo

O exemplo de código a seguir gera um erro porque a função f inclui uma definição mas está marcada como abstract.A instrução final no exemplo a seguir mostra o que declarar uma função virtual abstrata é equivalente à declaração de uma função virtual pura.

// abstract_keyword_3.cpp
// compile with: /clr
ref class X {
public:
   virtual void f() abstract {}   // C3634
   virtual void g() = 0 {}   // C3634
};

Consulte também

Conceitos

Extensões de componente para plataformas de tempo de execução