У вас есть другая возможность - определить ваш векторный и другие вмещающие классы через указатели на объекты некоторого класса:
class common {
//...
};
class vector {
common** v;
//...
public:
cvector(int);
common*& elem(int);
common*& operator[](int);
//...
};
Заметьте, что поскольку в таких векторах хранятся указатели, а не сами объекты, объект может быть "в" нескольких таких векторах одновременно. Это очень полезное свойство подобных вмещающих классов, таких, как вектора, связанные списки, множества и т.д. Кроме того, можно присваивать указатель на производный класс указателю на его базовый класс, поэтому можно использовать приведенный выше cvector для хранения указателей на объекты всех производных от common классов.
Например:
class apple : public common { /*...*/ }
class orange : public common { /*...*/ }
class apple_vector : public cvector {
public:
cvector fruitbowl(100);
//...
apple aa;
orange oo;
//...
fruitbowl[0] = &aa;
fruitbowl[1] = &oo;
}
Однако, точный тип объекта, вошедшего в такой вмещающий класс, больше компилятору не известен. Например, в предыдущем примере вы знаете, что элемент вектора является common, но является он apple или orange? Обычно точный тип должен в последствие быть восстановлен, чтобы обеспечить правильное использование объекта. Для этого нужно или в какой-то форме хранить информацию о типе в самом объекте, или обеспечить, чтобы во вмещающий класс помещались только объекты данного типа. Последнее легко достигается с помощью производного класса. Вы можете, например, создать вектор указателей на apple:
class apple_vector : public cvector {
public:
apple*& elem(int i)
{ return (apple*&) cvector::elem(i); }
//...
};
используя запись приведения к типу (тип)выражение, чтобы преобразовать common*& (ссылку на указатель на common), которую возвращает cvector::elem, в apple*&. Такое применение производных классов создает альтернативу обобщенным классам. Писать его немного труднее (если не использовать макросы таким образом, чтобы производные классы фактически реализовывали обобщенные классы, но оно имеет то преимущество, что все производные классы совместно используют единственную копию функции базового класса. В случае обобщенных классов, таких, как vector(type), для каждого нового используемого типа должна создаваться (с помощью implement()) новая копия таких функций. Другой способ, хранение идентификации типа в каждом объекте, приводит нас к стилю программирования, который часто называют объекто-основанным или объектно-ориентированным.
Другие работы по теме:
Электрическое поле
Работа по физике Ученика 10 класса А Школы №1202 Круглова Егора Электрическое поле По современным представлениям, электрические заряды не действуют друг на друга непосредственно. Каждое заряженное тело создает в окружающем пространстве
Проекция вектора на ось
Содержание: Введение…………………………………………………………………………3 Значение вектора и скаляра………………………………………….4 Определение проекции, оси и координатой точки………………...5
Лекция по Физике 2
Составил Бабичев С.А. Лекция №1 Тема: Введение в предмет. Разделы физики. Физические законы и системы единиц. Элементы векторной алгебры. Производная и интеграл при решении физических задач.
Важнейшие природы соединения алюминия
Варнавский Важнейшие природные соединения алюминия. Каолинит: 2SiO Каолинит - минерал подкласса слоистых силикатов, главная составная часть белой, огнеупорной, и фарфоровой глины. Обычно является продуктом выветривания. Имеет две полиморфные модификации - диккит и накрит. Каолинит сильно гигроскопичен.
Теория вектора
Содержание: 1. Что такое вектор? 2. Сложение векторов. 3. Равенство векторов. 4. Скалярное произведение двух векторов и его свойства. 5. Свойства операций над векторами.
Система уравнений по формулам Крамера
Задание № 1 Решить систему уравнений: 1) по формулам Крамера 2) с помощью обратной матрицы 3) методом Гаусса Решение найдем определитель матрицы методом Крамера
Векторная алгебра
ВЕКТОРНАЯ АЛГЕБРА - раздел векторного исчисления в котором изучаются простейшие операции над (свободными) векторами. К числу операций относятся линейные операции над векторами: операция сложения векторов и умножения вектора на число.
Векторная алгебра 3
ВЕКТОРНАЯ АЛГЕБРА ВЕКТОРНАЯ АЛГЕБРА - раздел векторного исчисления в котором изучаются простейшие операции над (свободными) векторами. К числу операций относятся линейные операции над векторами: операция сложения векторов и умножения вектора на число.
Аналітична геометрія
Реферат на тему: Аналітична геометрія в просторі Аналітична геометрія в просторі Загальне рівняння площини в тривимірному просторі, яка проходить через точку (x0;y0;z0) перпендикулярно до вектора
Векторы
Упорядоченную совокупность ( x1, x2, ... , xn ) n вещественных чисел называют n-мерным вектором.
Задачи по Математике 2
Часть 1. Системы координат. Коэффициент Ламэ. Элементы векторной алгебры. (х0, у0) равно: Ответ: 0 [z0, y0] равно: Ответ: - х0 [z0, x0] равно: Ответ: y0
Основные сведения из векторной алгебры
Векторная алгебра Основные сведения из векторной алгебры. Различают два рода величин: скалярные и векторные. 1. Если некоторая величина вполне определяется ее числовым значением, то ее называют скалярной. Примерами скалярных величин могут служить: масса, плотность, работа, сила тока, температура.
по Алгебре и геометрие
Федеральное агентство связи Сибирский Государственный Университет Телекоммуникаций и Информатики Межрегиональный центр переподготовки специалистов
Векторы 2
ВЕКТОРЫ Многие физические величины, например сила, перемещение материальной точки, скорость, характеризуются не только своим числовым значением, но и направлением в пространстве. Речь и идет о векторных величинах или просто векторах.
Декартовыми прямоугольными координатами
точки P на плоскости в двухмерной системе координат называются взятые с определенным знаком расстояния (выраженные в единицах масштаба) этой точки до двух взаимно перпендикулярных прямых — осей координат или проекции радиус-вектора r точки P на две взаимно перпендикулярные координатные оси.
Дії з векторами
1.4. . Означення 5 . Сумою двох векторів називають вектор , який сполучає початок вектора з кінцем вектора при умові, що початок вектора вміщено в кінець вектора
Наблюдатель Люенбергера
Непрерывная система с передаточной функцией. Оценка состояния объекта с помощью наблюдателя пониженного порядка. Расчет наблюдателя Люенбергера, оценивание вектора состояний. Решение задачи с использованием MatLab, построение графиков вектора состояния.
Присваивание и Инициализация
Строка - это структура данных, состоящая из вектора символов и длины этого вектора. Вектор создается конструктором и уничтожается деструктором. Однако это может привести к неприятностям.
Дискретное преобразование Фурье
Разработка функции вычисления дискретного преобразования Фурье от входного вектора. Исследование свойств симметрии ДПФ при мнимых, четных и нечетных входных сигналах. Применение обратного преобразования Фурье для генерации периодической функции косинуса.
Метод виокреслення лінійно незалежних векторів
1.Нехай V – не порожня підмножина векторів із Rm, коли з умов А є V, В є V випливає, що при L є R, B є R вектор La+ Bb є V. Візьмемо систему векторів а1, а2..., аn, що належать Rm. Множина всіх лінійних комбінацій цих векторів.
Розклад вектора за базисом
Означення . Лінійно залежними називають вектори , якщо існує хоч би одне дійсне число (і = 1,2,…, n), що не дорівнює нулю і виконується рівність Означення
Элементы земного магнетизма
Напряженность магнитного поля Земли в каждой точке земной поверхности полностью определяется вектором Т и его составляющими по осям прямоугольной системы координат х, у и z.
Вектори лінійні операції над ними
Пошукова робота на тему: Вектори, лінійні операції над ними. План Вектори і скаляри. Множення вектора на число. Додавання та віднімання векторів. Проекція вектора на вісь.
Похідна за напрямом Градієнт
1. Похідна за напрямом. Для характеристики зміни скалярного поля в заданому напрямі вводять поняття похідної за напрямом. Область простору кожній точці М якої поставлено у відповідність значення деякої скалярної величини