Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Пересечение множеств https://www.cyberforum.ru/ cpp-beginners/ thread849487.html
Здравствуйте. У меня следующая задача: Даны 2 множества A и B, причем множество B отсортировано по возрастанию. Необходимо получить индексы тех элементов множества А, которые содержатся в множестве...
C++ Сравнение векторов
Вот имеется вектор <bool> длиной допустим 5, а второй вектор <bool> длиной 200. Вот мне надо сравнить первый вектор с частью второго, зная размер первого. Вот так не получилось if(fs ==...
Заполнить массив А(10) случайными числами. Подсчитать и вывести на экран количество элементов массива, кратных 7 и не кратных 3 C++
1) Заполнить массив А(10) случайными числами. Подсчитать и вывести на экран количество элементов массива, кратных 7 и не кратных 3. 2)Дан массив R(5). Значения элементов массива ввести с...
C++ Дан одномерный массив,введенный с клавиатуры Дан одномерный массив,введенный с клавиатуры. -Найти сумму неотрицательных элементов в каждой строчке. -Сформировать вектор В из элементов побочной диагонали https://www.cyberforum.ru/ cpp-beginners/ thread849445.html
C++ Найти минимальный элемент в матрице и посчитать количество отрицательных элементов,расположенных выше главной диагонали. https://www.cyberforum.ru/ cpp-beginners/ thread849444.html
Напишите программу формирования массива C(n,n) с помощью датчика случайных чисел из промежутка. -Найдите минимальный элемент и поменяйте его с первым элементом массива. -посчитать количество...
C++ хеширование
Написать функцию int incl_lexm (char *p_lexm, char type _lexm), которая методом хеширования для строки, адресуемой p_lexm, определяет свободную позицию в таблице tabl, и если в ней отсутствует...
C++ Поиск минимального элемента идеально сбалансированного дерева
Как найти минимальный элемент? Вообще не представляю. зы. Дерево поиска другой разговор.
C++ Выход за пределы массива? Проблема с работой кода. при выполнении выскакивает ошибка "HEAP CORRUPTION DETECTED: after Normal block (#912) at 0x022E82C8 CRT detected that the application wrote to memory after end of heap... https://www.cyberforum.ru/ cpp-beginners/ thread849422.html
C++ Подсчитать количество целых среди чисел a.b.c https://www.cyberforum.ru/ cpp-beginners/ thread849413.html
Подсчитать количество целых среди чисел a.b.c Добавлено через 6 минут помогите срочно надо Добавлено через 2 часа 8 минут =(((((((((((((((((((( Добавлено через 40 минут ну что так не кто...
C++ Проверить будут ли они сторонами треугольника Даны три положительных числа a.b.c. Проверить будут ли они сторонами треугольника. Если да то вычислить площадь этого треугольника Добавлено через 8 минут помогите((( https://www.cyberforum.ru/ cpp-beginners/ thread849411.html
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 18
0

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

27.04.2013, 14:59. Просмотров 920. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.04.2013, 14:59
Готовые ответы и решения:

базовый и производный класс, в базовом объявлена переменная "protected", она недоступна по имени в производном классе! template <class T> воду мутит!
Друзья! Вот код #include &lt;stdio.h&gt; template &lt;class T&gt; class otets { protected: int...

Есть базовый и производный класс, в базовом определена функция, необходимо её объявить в производном!
Как-то так, что ли: class x { public: void f_0 (){}; }; class y: public x { ...

Базовый класс Complex и производный класс для реализации квадратных матриц
1) Создайте базовый класс Complex (комплексное число) для реализации комплексных чисел в...

Создать базовый класс - Array и производный класс - Money для работы денежной суммы
ПОМОГИТЕ, ПОЖАЛУЙСТА, С ЗАДАЧЕЙ Создать базовый класс - Array и производный класс - Money для...

7
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.