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.
Requisitos
Opção do compilador: /ZW
Common Language Runtime
Requisitos
Opção do compilador: /clr
Exemplos
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