Множественное наследование




Множественное наследование используется тогда, когда необходимо наделить производный класс свойствами более чем одного класса. В тех случаях, когда в базовых классах содержатся методы с одинаковыми именами, доступ к ним из производного класса осуществляется с помощью явного указания имени класса, членами которого они являются.

class A {

public:

...

void mf(void);

};

 

class B {

...

public:

...

void mf(void);

};

 

class C: public A, public B {

public:

...

};

 

C c;

c.A::mf(); // вызывается функция класса A

c.B::mf(); // вызывается функция класса B

Виртуальные базовые классы

Для классов, порожденных от производных классов, с общим виртуальным классом, существует только один экземпляр объекта общего базового класса.

class V {

...

public:

...

void Vmf(void);

};

class A: virtual public V, public S {

...

public:

...

void Amf(void);

};

class B: virtual public V, public T {

...

public:

...

void Bmf(void);

};

class C: public A, public B {

...

public:

};

Класс V является единственным общим объектом внутри класса C, то есть - общим для классов A и B, входящих в состав класса C.

Пример. Наследование вектора.

Унаследуем динамический массив из предыдущего задания таким образом, чтобы в элементах базового вектора хранились рациональные числа. Размерность производного вектора при этом будем считать вдвое меньшей, по сравнению с базовым классом.

class Vector;

class Ratio;

class ratiovector: public Vector

{

public:

//========== Конструкторы ======//

// Конструктор:

ratiovector(int N=0): Vector(N*2) {}

 

// Конструктор копирования – не наследуется:

ratiovector(const ratiovector& src): vector((const vector&)src) {}

//============= Перегрузка [] ==========//

Ratio operator [] (int index)

{

return Ratio(v[index*2], v[index*2+1]);

}

//============= Присваивание ==========//

void Set(int index, const Ratio& src)

{

v[index*2] = src.a; v[index*2+1] = src.b;

}

//============= Сложение ==========//

ratiovector& operator+=(ratiovector& src)

{

if (len!= src.len) return *this;

 

for (int k=0; k < src.len/2; k++) {

int ch = v[k*2] * src.v[k*2+1] + v[k*2+1] * src.v[k*2];

int zn = v[k*2+1] * src.v[k*2+1];

v[k*2] = ch;

v[k*2+1] = zn;

}

return *this;

}

 

// Деструктор - наследуется

};


Вариант

Базовый класс – массив вещественных чисел, производный класс – массив вещественных чисел, представленных в виде пар чисел x=M*10^e, где M – мантисса числа, e – экспонента (например, число 15.432=1.5432*10^(1), то есть: M=1.5432 e=1).

Определите в нем конструктор, деструктор, конструктор копирования, оператор присваивания.

Переопределите операции вставки, удаления элемента, а также операторы: [ ], +=, -=, *=, /=. Арифметические операторы применяются поэлементно.

Вариант

Базовый класс – массив целых чисел, производный класс – массив рациональных чисел чисел, представленных по модулю числа N (то есть в виде пар: целая часть при делении на N, остаток от деления на N).

Определите в нем конструктор, деструктор, конструктор копирования, оператор присваивания.

Переопределите операции вставки, удаления элемента, а также операторы: [ ], +=, -=, *=, /=. Арифметические операторы применяются поэлементно.

Вариант

Базовый класс – массив вещественных чисел, производный класс – массив двумерных векторов.

Определите в нем конструктор, деструктор, конструктор копирования, оператор присваивания.
Переопределите операции вставки, удаления элемента, а также операторы: [ ], +=, -=, *=. Умножение –произведение каждого вектора на матрицу 2x2, представленную отдельным классом.

Вариант

Базовый класс – массив вещественных чисел, производный класс – массив трехмерных векторов.

Определите в нем конструктор, деструктор, конструктор копирования, оператор присваивания.
Переопределите операции вставки, удаления элемента, а также операторы: [ ], +=, -=, *=. Умножение – векторное произведение векторов.

Вариант

Базовый класс – массив вещественных чисел, производный класс – массив пар чисел (x,y) с операциями:

(x,y)+(z,k)=(xz,yk), (x,y)-(z,k)=(x/z,y/k), a(x,y)=(xa,ya)

Определите в нем конструктор, деструктор, конструктор копирования, оператор присваивания. Переопределите операции [ ], +=, -=, *= (число).

Вариант

Базовый класс – массив чисел, производный класс – массив комплексных чисел.

Определите в нем конструктор, деструктор, конструктор копирования, оператор присваивания.
Переопределите операции вставки, удаления элемента, а также операторы: [ ], +=, -=, *=. Определите метод класса, возвращающий минимальный по модулю вектор в массиве.

Вариант

Базовый класс – массив чисел, производный класс – массив рациональных чисел.

Определите в нем конструктор, деструктор, конструктор копирования, оператор присваивания. переопределите операции вставки, удаления элемента, переопределите операции [ ], +=, -=, *=.

Вариант

Базовый класс – массив чисел, производный класс – массив дат, представленных тройками чисел: день, месяц, год.

Определите в нем конструктор, деструктор, конструктор копирования, оператор присваивания.

Переопределите операции вставки, удаления элемента, переопределите операции [ ], +=, -=.

Вариант

Базовый класс – массив чисел, производный класс – массив времен, представленных тройками чисел: часы, минуты, секунды.

Определите в нем конструктор, деструктор, конструктор копирования, оператор присваивания. Переопределите операции вставки, удаления элемента, переопределите операции [ ], +=, -=.

Вариант

Базовый класс – массив чисел, производный класс – массив квадратных матриц 2х2.

Определите в нем конструктор, деструктор, конструктор копирования, оператор присваивания. Переопределите операции [ ], +=, -=, *=.

Вариант

Базовый класс – массив чисел, производный класс – массив квадратных трехчленов.

Определите в нем конструктор, деструктор, конструктор копирования, оператор присваивания. Переопределите операции [ ], +=, -=, *= (число).

Вариант

Базовый класс – массив чисел, производный класс – массив полиномов 4 порядка с условием Р(0)=0.

Определите в нем конструктор, деструктор, конструктор копирования, оператор присваивания. Переопределите операции [ ], +=, -=, *= (число).

Вариант

Базовый класс – массив чисел, производный класс – квадратная матрица 2х2 со скалярным произведением (A,B)=tr(AB) (tr – «след» матрицы, сумма ее диагональных элементов).

Определите в нем конструктор, деструктор, конструктор копирования. Переопределите операции доступа к элементу матрицы, +=, -=, *, где умножение - скалярное произведение по приведенной выше формуле.

Вариант

Базовый класс – массив чисел, производный класс – массив полиномов 3 порядка.

Определите в нем конструктор, деструктор, конструктор копирования. Переопределите операции [ ], +=, -=, *= (число).

Вариант

Базовый класс – массив чисел, производный класс – квадратный трехчлен со скалярным произведением:
(P,Q)=P(-1)Q(-1)+P(0)Q(0)+P(1)Q(1)

Определите в нем конструктор, деструктор, конструктор копирования. Переопределите операции [ ], +=, -=, *=. Умножение – скалярное произведение по приведенной выше формуле.

Вариант

Базовый класс – массив чисел, производный класс – квадратный трехчлен со скалярным произведением:
(P,Q)=P'(-1)Q'(-1)+P'(0)Q'(0)+P'(1)Q'(1)

Определите в нем конструктор, деструктор, конструктор копирования. Переопределите операции [ ], +=, -=, *=. Умножение – скалярное произведение по приведенной выше формуле.

Вариант

Базовый класс – массив чисел, производный класс – квадратный трехчлен со скалярным произведением:
(P,Q)=P (0)Q(0)+P'(0)Q'(0)+P''(0)Q''(0)

Определите в нем конструктор, деструктор, конструктор копирования. Переопределите операции [ ], +=, -=, *=. Умножение – скалярное произведение по приведенной выше формуле.

Вариант

Базовый класс – массив чисел, производный класс – квадратная симметричная матрица 2х2, поддерживающая дополнительные операции умножения.

Определите в нем конструктор, деструктор, конструктор копирования.

Переопределите операции доступа к элементу матрицы, +=, -=,*= (число) и *= (матрица).

Вариант

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

Определите в нем конструктор, деструктор, конструктор копирования.

Переопределите операции доступа к элементу матрицы, +=, -= и *=.

Вариант

Базовый класс – массив чисел, производный класс – матрица произвольной размерности, поддерживающая операции вставки дополнительного ряда и столбца (оба – представлены векторами).

Определите в нем конструктор, деструктор, конструктор копирования. Переопределите операции доступа к элементу матрицы, операции вставки дополнительного ряда и столбца.

Вариант

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

Определите в нем конструктор, деструктор, конструктор копирования. Переопределите операции доступа к элементу матрицы, операции удаления дополнительного ряда и столбца.

Вариант

Базовый класс – вектор чисел, производный класс – матрица произвольной размерности, поддерживающая операции сложения, вычитания, умножения на число и умножения на вектор.

Определите в нем конструктор, деструктор, конструктор копирования. Переопределите операции доступа к элементу матрицы, операции +=, -=, *= (число), *=(вектор).

Вариант

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

Определите в нем конструктор, деструктор, конструктор копирования. Переопределите операции доступа к элементу матрицы, +=, -= и *=.

Вариант

Базовый класс – массив чисел, производный класс – матрица размерности 2х2 со скалярным произведением:

(A,B)=a11b11+a12b12+a22b22

Определите в нем конструктор, деструктор, конструктор копирования. Переопределите операции доступа к элементу матрицы, +=, -= и *=.

Вариант

Базовый класс – массив чисел, производный класс – евклидово пространство вектор‑столбцов 3х1, ортогональных заданному вектору а.

Определите в нем конструктор, деструктор, конструктор копирования. Переопределите операции [ ], +=, -= и *= (число).

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2018-01-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: