Function s4(sqrt,r_min,r_max,orig,100,25,25);
Аргументы, заданные по умолчанию, являются альтернативой перегруженным функциям. Вместо определения одного конструктора с тремя аргументами, заданными по умолчанию, мы могли бы задать четыре конструктора.
struct Function:Shape { // альтернатива аргументам, заданным
// по умолчанию
Function(Fct f,double r1,double r2,Point orig,
int count, double xscale,double yscale);
// масштаб переменной y по умолчанию:
Function(Fct f,double r1,double r2,Point orig,
int count, double xscale);
// масштаб переменной x и y:
Function(Fct f,double r1,double r2,Point orig,int count);
// значение count по умолчанию и масштаб x и y по умолчанию:
Function(Fct f,double r1,double r2,Point orig);
};
struct Function:Shape {
Function(Fct f,double r1,double r2,Point orig,
int count = 100,double xscale,double yscale); // ошибка
};
Если аргумент имеет значение, заданное по умолчанию, то все последующие аргументы также должны их иметь.
struct Function:Shape {
Function(Fct f,double r1,double r2,Point orig,
int count = 100,double xscale=25,double yscale=25);
};
Иногда угадать удачные значения по умолчанию легко. Например, для строки хорошим выбором значения по умолчанию будет пустой объект класса string, а для вектора — пустой объект класса vector. В других ситуациях, например для класса Function, правильно выбрать значения по умолчанию значительно сложнее: для этого приходится применять метод проб и ошибок. Помните, что вы не обязаны задавать значения по умолчанию и, если вам трудно это сделать, просто предоставьте пользователю самому задать аргумент.
15.3.2. Новые примеры
Мы добавили еще несколько функций — косинус (cos) из стандартной библиотеки и — просто для того, чтобы продемонстрировать, как создать сложную функцию, — косинус с наклоном x/2.
double sloping_cos(double x) { return cos(x)+slope(x); }
Результат приведен ниже.
Соответствующий фрагмент кода выглядит так:
Function s4(cos,r_min,r_max,orig,400,20,20);
s4.set_color(Color::blue);
Function s5(sloping_cos, r_min,r_max,orig,400,20,20);
x.label.move(–160,0);
x.notches.set_color(Color::dark_red);
Кроме сложения этих двух функций, мы сместили метку оси
В заключение построим графики логарифма, экспоненты, синуса и косинуса.
Function f1(log,0.000001,r_max,orig,200,30,30); // ln()
Function f2(sin,r_min,r_max,orig,200,30,30); // sin()
f2.set_color(Color::blue);
Function f3(cos,r_min,r_max,orig,200,30,30); // cos()
Function f4(exp,r_min,r_max,orig,200,30,30); // exp()
Поскольку значение log(0) не определено (с математической точки зрения оно равно бесконечности), мы начали диапазон изменения функции log с небольшого положительного числа. Результат приведен ниже.
Вместо приписывания меток этим графикам мы изменили их цвет.
Стандартные математические функции, такие как cos(), sin() и sqrt(), объявлены в стандартном библиотечном заголовке . Список стандартных математических функций приведен в разделах 24.8 и B.9.2.
15.4. Оси