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. Оси