Могу ли я опустить не публикуемое c наследование для предварительного объявления классов? - PullRequest
0 голосов
/ 29 февраля 2020

Допустим, у меня есть фрагмент кода, подобный следующему:

// Foo.h:
class Incomplete; // the forward-declaration
class Foo {
  void bar(Incomplete&); // doesn't really matter
};
// Foo.cpp:
class Incomplete : private Baz {
};
void Foo::bar(Incomplete&) {
}

Является ли классы с прямым объявлением, как в Foo.h, совместимыми со стандартами? Если да, то на каком языке? Как насчет того же protected наследования?

1 Ответ

5 голосов
/ 29 февраля 2020

Предварительное объявление класса требуется для исключения наследования. Вы не можете написать

class Incomplete : private Baz;

, даже если хотите.

Цель прямого объявления - просто указать, что конкретное имя в определенном пространстве имен относится к классу. Указание базового класса является частью определения, поскольку оно дает информацию о расположении класса в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...