С++ - язык, который изучается постепенно.Оптимизация с применением производящих функций


Материалы книги получены с http://www.itlibitum.ru/

Оптимизация с применением производящих функций

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

class Number {

public:

static Number* make(); // Конструирует число по умолчанию

static Number* make(int);

static Number* make(double);

static Number* make(string); // Например, "-1.23"

};

// В файле .cpp

class Integer : public Number { ... };

class Real : public Number { ... };

class ArbitraryPrecisionNumber : public Number { ... };

Number* Number::make()

{

return new Integer(0);

}

Number* Number::make(int x)

{

return new Integer(x);

}

Number* Number::make(double x)

{

return new Real(x);

}

Number* Number::make(string s)

{

// Псевдокод

if (малое целое)

return new Integer(atoi(s));

if (большое целое)

return new ArbitraryPrecisionNumber(s);

if (вещественное)

// И т.д.

}

Сделать то же с помощью конструкторов не удастся. К тому моменту, когда компилятор начинает искать конструктор с подходящей сигнатурой, вы уже сообщили ему, экземпляр какого класса создается. Более того, такая методика отделяет структуру производных классов от аргументов производящей функции.


Назад    Содержание    Далее    

Copyright 2005. Климов Александр. All Right Reserved.
Сайт создан в системе uCoz