    В строках 34-55 демонстрируется использование других объектов класса 
TDatabase, Особенно любопытна строка 35: 

    dbp.Getfiecord(O) = new TRecord("George Bush"), 

    Поскольку функция GetRecordO возвращает ссылку на объект, она может 
использоваться в левой части оператора присваивания. В данном случае создается новый 
объект TRecord, а его адрес присваивается в базе данных записи с индексом нуль, 
ссылку на которую возвращает функция GetRecord(). 
    Обратите внимание, что во всех этих примерах вам не надо информировать 
компилятор с помощью приведения типов о типах данных, используемых классом 
TDatabase. Несмотря на обобщенную природу можно избежать приведения типов и, 
тем не менее, создавать классы, которые могут поддерживать множество различных 
типов данных. 

    СОВЕТ

    Вероятно, лучше не писать шаблонные классы с чистого листа. Вместо этого вы
можете написать класс  TDatafease, использующий заданные объекты TRecord, Затем, 
после отладки TDatabase, вм можете преобразовать его в универсальный шаблон. 
Преобразование обычных классов в шаблоны подобным; способом помогает также определить 
истинно обобщенные свойства класса — требование, которое чаек» является
наиболее сложным аспектом создания полезных шаблонов.	

    Разное 

    Все компьютерные языки имеют ценные, но редко используемые средства. 
Скорее всего, вы не захотите пользоваться следующими приемами слишком часто, 
тем не менее одно или несколько этих средств C++ могут оказаться полезными для вас. 

    Указатели на функции-члены 

    Вы можете ссылаться на функции-члены класса с помощью указателей, но не 
так, как вы ссылаетесь на обычные функции (см. главу 9). Функции-члены 
вызываются для объектов класса, и они получают скрытый указатель this. Поэтому 
адресация функций-членов с помощью указателей требует нового подхода. 
    Указатель на функцию-член связан с именем ее класса. Например, для 
класса TFirstClass вы можете объявить функцию-член следующим образом: 

    double (TFirstClass:: *myfnptr)(void); 

    Это означает, что указатель myfnptr ссылается на функцию-член класса 
TFirst Class, не имеющую параметров и возвращающую вещественное значение 
двойной точности. Для объявления myfnptr указателем, ссылающимся на функцию, 
которая ничего не возвращает и имеет два целочисленных параметра, вы можете 
написать следующее: 

    void (TFirstClass::*myfnptr)(int, int); 

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

    Листинг 15.14. MFNPTR.CPP (указатели на функции-члены) 

    1:	#include <iostream.h> 
    2:	#include <iomanip.h> 
    3: 
    4:	class TFirstClass { 
    5;	private:         
    6:	   int count;
    7:	public:         
    8:	  TFirstClass() { count » 0; }
    9:	   int Access(void) ;           
    10:	}
    11:	
    12:	int (TFirstClass::*myfnptr)(void); 
    13: 
    14:	main() 
    15:	{ 


    394     Часть III. Программирование на ANSI C++ 
