C++   ::   Хилл Мюррей

Страница: 52 из 357

16 Обобщенные Вектора

«Пока все хорошо,» – можете сказать вы, – «но я хочу, чтобы один из этих векторов был типа matrix, который я только что определил.» К сожалению, в С++ не предусмотрены средства для определения класса векторов с типом элемента в качестве параметра. Один из способов – продублировать описание и класса, и его функций членов. Это не идеальный способ, но зачатую вполне приемлемый.

Вы можете воспользоваться препроцессором (#4.7), чтобы механизировать работу. Например, класс vector – упрощенный вариант класса, который можно найти в стандартном заголовочном файле. Вы могли бы написать:

#include «vector.h»

declare(vector,int);

main() (* vector(int) vv(10); vv[2] = 3; vv[10] = 4; // ошибка: выход за границы *)

Файл vector.h таким образом определяет макросы, чтобы макрос declare(vector,int) после расширения превращался в описание класса vector, очень похожий на тот, который был определен выше, а макрос implement(vector,int) расширялся в определение функций этого класса. Поскольку макрос implement(vector,int) в результате расширения превращается в

определение функций, его можно использовать в программе только один раз, в то время как declare(vector,int) должно использоваться по одному разу в каждом файле, работающем с этим типом целых векторов.

declare(vector,char); //... implement(vector,char);

даст вам отдельный тип «вектор символов». Пример реализации обобщенных классов с помощью макросов приведен в #7.3.5.



1.17 Полиморфные Вектора

У вас есть другая возможность – определить ваш векторный и другие вмещающие классы через указатели на объекты некоторого класса: class common (* //... *); class vector (* common** v; //...

|< Пред. 50 51 52 53 54 След. >|

Java книги

Контакты: [email protected]