Добавлен '= x' после объявления метода в c ++ - PullRequest
3 голосов
/ 23 августа 2010

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

Может ли кто-нибудь сказать мне, что это такое?

Например:

virtual void MyMethod () = 0;

Что означает «= 0». :)

Спасибо всем !!!

Ответы [ 3 ]

6 голосов
/ 23 августа 2010

Это означает, что это чисто виртуальная функция, т. Е. В этом классе нет ее действительного определения, и она должна быть переопределена в подклассеНа самом деле это не присвоение как таковое, ноль - единственное значение, которое вы можете «назначить».

И это синтаксис C ++;в C # то же самое можно сделать с помощью ключевого слова abstract.

4 голосов
/ 24 августа 2010

В C ++ это означает, что метод является чисто виртуальным методом.

Это означает, что экземпляр этого конкретного типа класса не может быть создан. Вы можете создавать только экземпляры классов, производных от этого, которые переопределяют все чистые виртуальные методы в базовом классе.

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


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

#include <cstdio>

class A
{
public:
    virtual void foo() const = 0; //pure virtual
};

void A::foo() const { puts("A::foo"); }

class B: public A
{
public:
    virtual void foo() const { puts("B::foo"); }
};

int main()
{
    //A a;  //this would be an error - main point of having pure virtual functions
    B b;
    b.foo();
    b.A::foo();
}

Обычно этого делать не следует, за исключением случаев, когда виртуальный деструктор является чистым в базовом классе (в этом случае он должен быть определен).

2 голосов
/ 24 августа 2010

В C # это синтаксическая ошибка.

Если вы имели в виду C ++, см. Ответ спокойной.

...