Программирование. Принципы и практика использования C++ Исправленное издание, стр. 202
Function s(one,r_min,r_max,orig,n_points,x_scale,y_scale);Function s2(slope,r_min,r_max,orig,n_points,x_scale); // нет // yscaleFunction s3(square,r_min,r_max,orig,n_points); // нет xscale, // нет yscaleFunction s4(sqrt,r_min,r_max,orig); // нет count, нет xscale, // нет yscaleЭтот фрагмент кода эквивалентен следующему:
Function s(one,r_min,r_max,orig,n_points,x_scale,y_scale);Function s2(slope,r_min,r_max,orig,n_points,x_scale, 25);Function s3(square,r_min,r_max,orig,n_points,25,25);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);};Иногда угадать удачные значения по умолчанию легко. Например, для строки хорошим выбором значения по умолчанию будет пустой объект класса
stringvectorFunction15.3.2. Новые примеры
Мы добавили еще несколько функций — косинус (
cosx/2double 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);Кроме сложения этих двух функций, мы сместили метку оси x и (просто для иллюстрации) немного изменили цвет шкалы деления.
В заключение построим графики логарифма, экспоненты, синуса и косинуса.
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()<cmath>15.4. Оси
Для представления данных мы используем класс
AxisAxisAxis