Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Ключевое слово abstract объявляет, что:
Тип можно использовать в качестве базового типа, но экземпляр самого тип не может быть создан.
Функция-член типа может определяться только в производном типе.
Все платформы
Синтаксис
Абстрактный абстрактный идентификатор класса-объявления класса{}
virtualвозвращаемый тип абстрактный идентификатор-член-функция () ;
Замечания
В первом примере синтаксиса объявляется абстрактный класс. Компонент объявления класса может быть либо собственным объявлением C++ (classили), либо structобъявлением расширения C++ (класс ссылок или структурой ссылок), если /ZW указан параметр или /clr компилятор.
Во втором примере синтаксиса объявляется абстрактная виртуальная функция-член. Объявление функции абстрактной — то же, что и объявление ее чистой виртуальной функцией. Объявление функции-члена абстрактной также приводит к тому, что включающий класс объявляется как абстрактный.
Ключевое слово abstract поддерживается в машинном коде и в коде платформы, то есть он может компилироваться как с параметром компилятора /ZW или /clr, так и без него.
Во время компиляции можно определить, является ли тип абстрактным, с помощью признака типа __is_abstract(type). Дополнительные сведения см. в статье Compiler Support for Type Traits (C++/CLI and C++/CX) (Поддержка признаков типов компилятором (C++/CLI и C++/CX)).
Ключевое слово abstract является контекстно-зависимым описателем переопределения. Подробные сведения о контекстно-зависимых ключевых словах см. в статье Context-Sensitive Keywords (C++/CLI and C++/CX) (Контекстно-зависимые ключевые слова (C++/CLI and C++/CX)). Дополнительные сведения о описателях переопределения см. в разделе "Практическое руководство. Объявление описателей переопределения" в машинных компиляциях.
Среда выполнения Windows
Подробные сведения см. в статье Ref classes and structs (C++/CX) (Ссылочные классы и структуры (C++/CX)).
Требования
Параметр компилятора: /ZW
Среда CLR
Требования
Параметр компилятора: /clr
Примеры
В следующем примере кода возникает ошибка, поскольку класс X помечен как abstract.
// abstract_keyword.cpp
// compile with: /clr
ref class X abstract {
public:
virtual void f() {}
};
int main() {
X ^ MyX = gcnew X; // C3622
}
В следующем примере кода возникает ошибка, поскольку он создает экземпляр собственного класса, помеченного как abstract. Эта ошибка будет возникать как с параметром компилятора /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'}
В следующем примере кода возникает ошибка, поскольку функция f включает определение, но помечена как abstract. Последняя инструкция в примере показывает, что объявление абстрактной виртуальной функции эквивалентно объявлению чистой виртуальной функции.
// abstract_keyword_3.cpp
// compile with: /clr
ref class X {
public:
virtual void f() abstract {} // C3634
virtual void g() = 0 {} // C3634
};