Ответ 1
#define abstract
Можем ли мы написать абстрактное ключевое слово в классе С++?
#define abstract
Нет.
Чистые виртуальные функции в С++ объявляются как:
class X
{
public:
virtual void foo() = 0;
};
Любой класс, имеющий хотя бы один из них, считается абстрактным.
Нет, С++ не имеет абстрактного текста. Однако вы можете написать чистые виртуальные функции; что С++ способ выражения абстрактных классов.
Это ключевое слово, введенное как часть языка С++/CLI для платформы .NET.
нет, вам нужно иметь хотя бы одну чистую виртуальную функцию в классе, чтобы быть абстрактной.
Вот хорошая ссылка cplusplus.com
Как отмечают другие, если вы добавляете чистую виртуальную функцию, класс становится абстрактным.
Однако, если вы хотите реализовать абстрактный базовый класс без чистых виртуальных элементов, я считаю полезным сделать конструктор защищенным. Таким образом, вы вынуждаете пользователя подклассифицировать ABC для его использования.
Пример:
class Base
{
protected:
Base()
{
}
public:
void foo()
{
}
void bar()
{
}
};
class Child : public Base
{
public:
Child()
{
}
};
Фактическое ключевое слово abstract
существует в С++ (по крайней мере, VS2010), и я обнаружил, что он может быть использован для объявления класса/структуры как не созданного экземпляра.
struct X abstract {
static int a;
static void foX(){};
};
int X::a = 0;
struct Y abstract : X { // something static
};
struct Z : X { // regular class
};
int main() {
X::foX();
Z Zobj;
X Xobj; // error C3622
}
MSDN: https://msdn.microsoft.com/en-us/library/b0z6b513%28v=vs.110%29.aspx
Нет, вы не можете использовать абстрактный в качестве ключевого слова, потому что в C++ нет такого ключевого слова.
Если вы хотите сделать класс в виде абстракции из C++, вы можете объявить по крайней мере одну функцию как чисто виртуальную функцию.
Но в производном классе вы должны предоставить определение, иначе это даст ошибку компиляции.
Пример:
class A
{
public:
virtual void sum () = 0;
};
нота:
Вы можете использовать abstract как имя переменной, имя класса, потому что, как я уже говорил, abstract не является ключевым словом в C++.
Не существует ключевого слова 'abstract', но чистая виртуальная функция превращает класс в абстрактный класс, который можно расширить и использовать в качестве интерфейса.
Нет, у C++ нет ключевого слова abstract. Тем не менее, вы можете написать чисто виртуальные функции; что C++ способ выражения абстрактных классов. Это ключевое слово, представленное как часть описания языка C++/CLI для .NET Framework. У вас должна быть хотя бы одна чисто виртуальная функция в классе, чтобы быть абстрактной.
class SomeClass {
public:
virtual void pure_virtual() = 0; // a pure virtual function
};