Можно ли использовать ключевое слово abstract в классе С++?

Можем ли мы написать абстрактное ключевое слово в классе С++?

Ответы

Ответ 1

#define abstract

Ответ 2

Нет.

Чистые виртуальные функции в С++ объявляются как:

class X
{
    public:
        virtual void foo() = 0;
};

Любой класс, имеющий хотя бы один из них, считается абстрактным.

Ответ 3

Нет, С++ не имеет абстрактного текста. Однако вы можете написать чистые виртуальные функции; что С++ способ выражения абстрактных классов.

Ответ 4

Это ключевое слово, введенное как часть языка С++/CLI для платформы .NET.

Ответ 5

нет, вам нужно иметь хотя бы одну чистую виртуальную функцию в классе, чтобы быть абстрактной.

Вот хорошая ссылка cplusplus.com

Ответ 6

Как отмечают другие, если вы добавляете чистую виртуальную функцию, класс становится абстрактным.

Однако, если вы хотите реализовать абстрактный базовый класс без чистых виртуальных элементов, я считаю полезным сделать конструктор защищенным. Таким образом, вы вынуждаете пользователя подклассифицировать ABC для его использования.

Пример:

class Base
{
protected:
    Base()
    {
    }

public:
    void foo()
    {
    }

    void bar()
    {
    }
};

class Child : public Base
{
public:
    Child()
    {
    }
};

Ответ 7

Фактическое ключевое слово 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

Ответ 8

Нет, вы не можете использовать абстрактный в качестве ключевого слова, потому что в C++ нет такого ключевого слова.

Если вы хотите сделать класс в виде абстракции из C++, вы можете объявить по крайней мере одну функцию как чисто виртуальную функцию.

Но в производном классе вы должны предоставить определение, иначе это даст ошибку компиляции.

Пример:

class A
{
public:
  virtual void sum () = 0;
};

нота:

Вы можете использовать abstract как имя переменной, имя класса, потому что, как я уже говорил, abstract не является ключевым словом в C++.

Ответ 9

Не существует ключевого слова 'abstract', но чистая виртуальная функция превращает класс в абстрактный класс, который можно расширить и использовать в качестве интерфейса.

Ответ 10

Нет, у C++ нет ключевого слова abstract. Тем не менее, вы можете написать чисто виртуальные функции; что C++ способ выражения абстрактных классов. Это ключевое слово, представленное как часть описания языка C++/CLI для .NET Framework. У вас должна быть хотя бы одна чисто виртуальная функция в классе, чтобы быть абстрактной.

class SomeClass {
public:
   virtual void pure_virtual() = 0;  // a pure virtual function
};