Страницы

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

понедельник, 6 января 2020 г.

Что значит: “virtual void funcC( double = 0.0 );”?

#cpp #функции #параметры


Добрый день.
Случайно наткнулся на функцию у которой непонятно что записано в параметрах:


  virtual void funcC( double = 0.0 )


Если бы было имя переменной, то было бы понятно что это за параметр или если бы эта
штука не компилировалась бы, то это была бы опечатка) Так нет же, все компилируется
и работает. Что вот это такое, в чем его смысл: double = 0.0 ?
    


Ответы

Ответ 1



Значение по умолчанию. Если вы вызовите ее как Obj.funcC() - это будет воспринято как Obj.funcC(0.0). Словом, читайте, что такое значения аргументов функций по умолчанию - например, тут. Имени переменной нет - потому что она может быть просто зарезервирована или не нужна. Например, в наследнике она может понадобиться. А в базовом классе она не нужна. struct Base { virtual void out(double = 0.0) { cout << "Base::out\n"; } }; struct Derived: public Base { virtual void out(double x) { cout << "Drived::out " << x << "\n"; } }; int main(int argc, const char * argv[]) { Base * b = new Derived; b->out(); // Тут вызовется out() из Derived со значением 0.0 b->out(3); // Тут - со значением 3.0 } Имени аргумента в Base не нужно - он не используется, и нужен только для обеспечения сигнатуры. Если ввести какое-то имя - компилятор справедливо заметит, что имя есть, но не используется. Тут - он промолчит.

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

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