Вход/Регистрация
Программирование. Принципы и практика использования C++ Исправленное издание
вернуться

Страуструп Бьерн

Шрифт:

Function::Function(Fct f,double r1,double r2,Point xy,

int count,double xscale,double yscale)

// строит график функции f(x) для x из диапазона [r1:r2),

// используя count отрезков линий;

// начало координат (0,0) располагается в точке xy

// координаты x масштабируются множителем xscale

// координаты y масштабируются множителем yscale

{

if (r2–r1<=0) error("Неправильный диапазон");

if (count <=0) error("Отрицательное значение count");

double dist = (r2–r1)/count;

double r = r1;

for (int i = 0; i<count; ++i) {

add(Point(xy.x+int(r*xscale),xy.y–int(f(r)*yscale)));

r += dist;

}

}

Параметры

xscale
и
yscale
используются для масштабирования координат x и y соответственно. Обычно масштабирование необходимо для того, чтобы правильно расположить рисунок в окне.

Обратите внимание на то, что объект класса

Function
не хранит значения, передаваемые его конструктору, поэтому мы не можем впоследствии запросить у функции информацию о том, где находится начало координат, или перерисовать график с другими масштабирующими множителями. Этот объект просто хранит точки (в классе
Shape
) и выводит график на экран. Если бы мы хотели повысить гибкость объекта класса Function после его создания, то должны были бы хранить в нем требуемые значения (см. упр. 2).

15.3.1. Аргументы по умолчанию

Обратите внимание на способ инициализации аргументов

xscale
и
yscale
конструктора класса Function. Такой способ инициализации называют заданием аргументов по умолчанию (default arguments). Их значения используются тогда, когда при вызове значения аргументов вообще не указываются.

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); // нет

// yscale

Function s3(square,r_min,r_max,orig,n_points); // нет xscale,

// нет yscale

Function 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);

};

Для определения четырех конструкторов необходимо проделать больше работы, при этом в определениях конструкторов природа значений, заданных по умолчанию, скрыта, а при их явном задании в объявлении функции они выражаются явно. Аргументы по умолчанию часто используются при объявлении конструкторов, но они могут быть полезными для любых функций. Определять аргументы по умолчанию можно лишь для смежных аргументов.

  • Читать дальше
  • 1
  • ...
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: