c ++: объяснить это объявление функции - PullRequest
2 голосов
/ 23 июня 2010
class PageNavigator {
 public:
  // Opens a URL with the given disposition.  The transition specifies how this
  // navigation should be recorded in the history system (for example, typed).
  virtual void OpenURL(const GURL& url, const GURL& referrer,
                       WindowOpenDisposition disposition,
                       PageTransition::Type transition) = 0;
};

Я не понимаю, что это за = 0; часть ... что мы пытаемся сообщить?

Ответы [ 3 ]

10 голосов
/ 23 июня 2010

'= 0' означает, что это чисто виртуальный метод . Он должен быть переопределен в наследующем классе.

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

Любопытная деталь: «= 0» не означает, что метод не имеет определения (нет тела). Вы все еще можете предоставить тело метода, например ::10000

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

void A::f()
{
  std::cout << "This is A::f.\n";
}

class B : public A
{
 public:
  void f();
}

void B::f()
{
  A::f();
  std::cout << "And this is B::f.\n";
}
3 голосов
/ 23 июня 2010

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

0 голосов
/ 23 июня 2010

= 0 означает, что функция является чисто виртуальной или абстрактной функцией, что на практике означает две вещи:

a) Класс с абстрактной функцией является абстрактным классом. Вы не можете создать экземпляр абстрактного класса.

b) Вы должны определить подкласс, который переопределяет его реализацией.

...