Ключевые слова наследования
Блок, относящийся только к системам Майкрософт
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
компилятора (отключить расширения языка).
Завершение блока, относящегося только к системам Майкрософт
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по