Поделиться через


Ключевые слова наследования

Блок, относящийся только к системам Майкрософт

class class-name
class __single_inheritance class-name
class __multiple_inheritance class-name
class __virtual_inheritance class-name

где:

class-name
Имя объявляемого класса.

C++ позволяет объявлять указатель на член класса перед определением класса. Например:

class S;
int S::*p;

В приведенном выше p коде объявлен указатель на целочисленный член класса S. class S Однако еще не определено в этом коде. Оно было объявлено только в этом коде. Когда компилятор обнаруживает такой указатель, он должен создать обобщенное представление указателя. Размер представления зависит от указанной модели наследования. Существует три способа указать модель наследования компилятору:

  • В командной строке с помощью переключателя /vmg

  • pointers_to_members Использование pragma

  • Использование ключевых слов __single_inheritanceнаследования , __multiple_inheritanceи __virtual_inheritance. При использовании этого метода управление моделью наследования осуществляется на уровне класса.

    Примечание.

    Если указатель на член класса всегда объявляется после определения класса, нет необходимости использовать какой-либо из этих параметров.

Если вы объявляете указатель на член класса перед определением класса, это может отрицательно повлиять на размер и скорость результирующего исполняемого файла. Чем сложнее наследование, используемое классом, тем больше число байтов, необходимых для представления указателя на член класса. И, чем больше код, необходимый для интерпретации указателя. Одно (или нет) наследование является наименее сложным, и виртуальное наследование является самым сложным. Указатели на элементы, объявленные перед определением класса, всегда используют наибольшее, наиболее сложное представление.

Если приведенный выше пример изменить на

class __single_inheritance S;
int S::*p;

Затем независимо от указанных параметров командной строки или прагм, указатели на элементы class S будут использовать наименьшее возможное представление.

Примечание.

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

Для совместимости с предыдущими версиями _single_inheritance, _multiple_inheritanceи являются синонимами для __single_inheritance, __multiple_inheritanceи __virtual_inheritance _virtual_inheritance если не указан параметр /Za компилятора (отключить расширения языка).

Завершение блока, относящегося только к системам Майкрософт

См. также

Ключевые слова