У методов в классе есть приставки virtual и тп, а так же после метода const, override, final, & и тп.
Как они классифицируются, называются (до и после)? Есть предположение что все что после пишется в реализации, а не только в определении, метода, а до - нет, верно ли это?
На en.cppreference.com не нашел такого разделения, ткните пожалуйста.
Ответ
Есть сигнатуры (типы) функций, и есть ключевые слова (спецификаторы), которые добавляются к объявлению функции-члена класса.
Сигнатуры функций должны повторяться в объявлении функции, и в ее определении.
Ключевые слова static, virtual, override, final, = 0 - используются только при объявлении функции, в теле класса.
Это можно проиллюстрировать так:
using F = void(); // сигнатура функции (в т.ч. члена класса)
using M1 = void() const; // сигнатура, может быть только у членов класса
using M2 = void() const &;
F f; // объявление функции f с сигнатурой F
void f() {} // определение функции f
struct X {
F f1; // объявление функции-члена класса f1 с сигнатурой F
static F f2; // объявление статической функции-члена класса
virtual F f3; // объявление виртуальной функции-члена класса
virtual F f4 = 0; // объявление чисто-виртуальной функции-члена класса
virtual M1 m1 = 0;
virtual M2 m2 = 0;
};
void X::f1() {} // Определения функций f1, f2, f3
void X::f2() {}
void X::f3() {}
struct Y : X {
F f4 override; // переопределения виртуальных функций f4, m1, m2
virtual M1 m1;
M2 m2 final;
};
void Y::f4 {} // Определения функций f4, m1, m2
void Y::m1 const {}
void Y::m2 const & {}
То, с какой стороны находятся ключевые слова static, virtual, override, final, = 0 - определяется синтаксисом С++.
Комментариев нет:
Отправить комментарий