Ключевые слова наследования
Блок, относящийся только к системам Microsoft
class [__single_inheritance] class-name;
class [__multiple_inheritance] class-name;
class [__virtual_inheritance] class-name;
Здесь:
- имя-класса
Имя объявляемого класса.
В C++ указатель на член класса можно объявить до определения класса. Например:
class S;
int S::*p;
В представленном выше коде p объявляется как указатель на целочисленный член класса S. Однако class S еще не определен в этом коде; он только объявлен. Когда компилятор обнаруживает такой указатель, он должен создать обобщенное представление указателя. Размер представления зависит от указанной модели наследования. Указать модель наследования для компилятора можно четырьмя способами.
В интегрированной среде разработки в разделе Представление указателя на член.
В командной строке с помощью переключателя /vmg.
С помощью директивы pragma pointers_to_members.
С помощью ключевых слов наследования __single_inheritance, __multiple_inheritance и __virtual_inheritance. При использовании этого метода управление моделью наследования осуществляется на уровне класса.
Примечание
Если указатель на член класса всегда объявляется после определения класса, нет необходимости использовать какой-либо из этих параметров.
Объявление указателя на член класса до определения класса влияет на размер и скорость полученного исполняемого файла. Чем сложнее наследование, используемое в классе, тем больше число байтов, требуемых для представления указателя на член класса, и тем больше код, необходимый для интерпретации указателя. Одиночное наследование является самым простым, а виртуальное наследование — самым сложным.
Если приведенный выше пример изменить на
class __single_inheritance S;
int S::*p;
независимо от параметров командной строки или директив pragma указатели на члены class S будут использовать наименьшее возможное представление.
Примечание
То же опережающее объявление представления указателя на член должно быть включено в каждую запись преобразования, которая объявляет указатели на члены этого класса, и объявление должно выполняться до объявления указателей на члены.
Завершение блока, относящегося только к системам Microsoft