Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Указатели в базовом классе на базовый класс и производный класс - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Пересечение множеств http://www.cyberforum.ru/cpp-beginners/thread849487.html
Здравствуйте. У меня следующая задача: Даны 2 множества A и B, причем множество B отсортировано по возрастанию. Необходимо получить индексы тех элементов множества А, которые содержатся в множестве...
C++ Сравнение векторов Вот имеется вектор <bool> длиной допустим 5, а второй вектор <bool> длиной 200. Вот мне надо сравнить первый вектор с частью второго, зная размер первого. Вот так не получилось if(fs ==... http://www.cyberforum.ru/cpp-beginners/thread849456.html
Заполнить массив А(10) случайными числами. Подсчитать и вывести на экран количество элементов массива, кратных 7 и не кратных 3 C++
1) Заполнить массив А(10) случайными числами. Подсчитать и вывести на экран количество элементов массива, кратных 7 и не кратных 3. 2)Дан массив R(5). Значения элементов массива ввести с...
Дан одномерный массив,введенный с клавиатуры C++
Дан одномерный массив,введенный с клавиатуры. -Найти сумму неотрицательных элементов в каждой строчке. -Сформировать вектор В из элементов побочной диагонали
C++ Найти минимальный элемент в матрице и посчитать количество отрицательных элементов,расположенных выше главной диагонали. http://www.cyberforum.ru/cpp-beginners/thread849444.html
Напишите программу формирования массива C(n,n) с помощью датчика случайных чисел из промежутка. -Найдите минимальный элемент и поменяйте его с первым элементом массива. -посчитать количество...
C++ хеширование Написать функцию int incl_lexm (char *p_lexm, char type _lexm), которая методом хеширования для строки, адресуемой p_lexm, определяет свободную позицию в таблице tabl, и если в ней отсутствует... подробнее

Показать сообщение отдельно
dovskr
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 18

Указатели в базовом классе на базовый класс и производный класс - C++

27.04.2013, 14:59. Просмотров 734. Ответов 7
Метки (Все метки)

Пишу контейнер "Бинарное дерево поиска" для частотного словаря.

С самим контейнером особо вопросов нету. Вопрос по поводу элементов в нём.

Я создал базовую структуру, описывающую элемент обычного бинарного дерева.






C++
1
2
3
4
5
6
7
8
9
10
11
12
template <typename T>
struct CTreeElement
{
public:
    CTreeElement *Left;    // Указатель на левого сына данного узла
    CTreeElement *Right;  // Указатель на правого сына данного узла
protected:
    T Data;
public:
    CTreeElement(const T &Element): Data(Element), Left(nullptr), Right(nullptr) {};
    const T &GetData() const {return Data;};
};

Дальше я хочу создать структуру, описывающую элемент бинарного дерева поиска для частотного словаря( Эта структура должна наследовать верхнюю и добавляеть ещё int Count - количество раз, которое встретилось данное слово).

Всё бы хорошо, но возникает проблема. Мне надо чтобы теперь указатели Left и Right были типа производного класса а не базового. Всё что придумал на данный момент это просто переопределять переменные, но это совсем не тру.

C++
1
2
3
4
5
6
7
8
9
10
template <typename T>
struct CSearchTreeElement : public CTreeElement<T>
{
public:
    CSearchTreeElement *Left;
    CSearchTreeElement *Right;
    int Count;
public: 
    CSearchTreeElement(const T &Element) : Count(1), Left(nullptr), Right(nullptr), CTreeElement(Element) {};
};


Пробовал делать виртуальные функции GetLeft и GetRight в базовом классе которые возвращают эти указатели, но потом понял что переопределить их не получится в производном классе, так как они там уже должны будут возвращать указатели типа CSearchTreeElement.

Собственно есть какое-то решение некостыльное? Может есть какой-нибудь паттерн для этого?

Добавлено через 19 часов 37 минут
Ап.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru