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-declaration class-identifier resumo {}
virtual
tipo de retornoidentificador de função de membro () resumo ;
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
};