Добрый день. Случайно наткнулся на функцию у которой непонятно что записано в параметрах:
virtual void funcC( double = 0.0 )
Если бы было имя переменной, то было бы понятно что это за параметр или если бы эта штука не компилировалась бы, то это была бы опечатка) Так нет же, все компилируется и работает. Что вот это такое, в чем его смысл: double = 0.0 ?
Значение по умолчанию.
Если вы вызовите ее как 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 не нужно - он не используется, и нужен только для обеспечения сигнатуры.
Если ввести какое-то имя - компилятор справедливо заметит, что имя есть, но не используется. Тут - он промолчит.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как вывести не-ASCII текст с помощью std::wcout в Windows XP, если для компиляции используется MinGW w64? Уже посмотрел кучу похожих вопросов, но ничего из этого...