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

Ссылки


Home
Бизнес
Справочники
Советы







Материалы книги получены с 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 (вещественное)

// И т.д.

}

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


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

Home  Создание сайтов  Учебник по записи CD  Справочник Web дизайнера Самоучитель IE PHP и MySQL Компьютерные сети С++ E-mail me

Copyright 2007. Климов Александр. All Right Reserved.
Hosted by uCoz