Страницы

Поиск по вопросам

вторник, 9 октября 2018 г.

Определение и реализация

У методов в классе есть приставки 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 - определяется синтаксисом С++.

Комментариев нет:

Отправить комментарий