abstract (C++/CLI e C++/CX)

A palavra-chave abstract declara que:

  • Um tipo pode ser usado como um tipo base, mas o tipo em si não pode ser instanciado.

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

Todas as plataformas

Sintaxe

class-declarationclass-identifierabstract {}

virtualreturn-typemember-function-identifier() abstract ;

Comentários

A primeira sintaxe de exemplo declara que uma classe é abstrata. O componente class-declaration pode ser uma declaração do C++ nativa (class ou struct) ou uma declaração de extensão do C++ (ref class ou ref struct) se a opção do compilador /ZW ou /clr estiver especificada.

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

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

É possível detectar se um tipo é abstrato com o tipo __is_abstract(type) no tempo de compilação. Saiba mais em Suporte para compilador de traços de tipo.

A palavra-chave abstract é um especificador de substituição contextual. Saiba mais sobre palavras-chave contextuais em Palavras-chave contextuais. Para obter mais informações sobre especificadores de substituição, confira Como declarar especificadores de substituição em compilações nativas.

Windows Runtime

Saiba mais em Classes e structs ref.

Requisitos

Opção do compilador: /ZW

Common Language Runtime

Requisitos

Opção do compilador: /clr

Exemplos

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
}

O exemplo de código a seguir gera um erro porque cria uma instância de uma classe nativa marcada como abstract. Este erro ocorrerá com ou sem a opção do 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'}

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 mostra que declarar uma função virtual como abstrata é equivalente a declarar uma função como virtual pura.

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

Confira também

Extensões de componentes para .NET e UWP