По умолчанию, методы являются статическими, однако они мо-
гут, за исключением конструкторов, быть виртуальными (посредством
включения директивы virtual в описание метода). Компилятор разре-
шает ссылки на вызовы статических методов во время процесса ком-
пиляции, тогда как вызовы виртуальных методов разрешаются во вре-
мя выполнения. Это иногда называют поздним связыванием.
Если объектный тип объявляет или наследует какой-либо вирту-
альный метод, то переменные этого типа должны быть инициализиро-
ваны посредством вызова конструктора перед вызовом любого вирту-
ального метода. Таким образом, объектный тип, который описывает
или наследует виртуальный метод, должен также описывать или нас-
ледовать по крайней мере один метод-конструктор.
Объектный тип может переопределять любой из методов, которые
он наследует от своих родителей. Если описание метода в потомке
указывает тот же идентификатор метода, что и описание метода в
родителе, то описание в потомке переопределяет описание в родите-
ле. Область действия переопределяющего метода расширяется до сфе-
ры действия потомка, в котором этот метод был введен, и будет ос-
таваться таковой, пока идентификатор метода не будет переопреде-
лен снова.
Переопределение статического метода не зависит от изменения
заголовка метода. В противоположность этому, переопределение вир-
туального метода должно сохранять порядок, типы и имена парамет-
ров, а также типы результатов функций, если таковые имеются. Бо-
лее того, переопределение опять же должно включать директиву
virtual.