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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Xunt
0 / 0 / 0
Регистрация: 30.11.2013
Сообщений: 8
#1

Ошибка при работе с потомками абстрактного класса - C++

24.12.2013, 22:07. Просмотров 199. Ответов 0
Метки нет (Все метки)

Что я пытаюсь сделать: 1. Создать базовый класс бинарного дерева Tree, наследовать от него класс АВЛ-дерева, для которого реализовать вставку и удаление элементов. Узел дерева Tree реализован в классе Node, а для avlTree - в avlNode. Это вроде без проблем.
2. Но кроме этого нужно создать абстрактный (!) класс inform для информационного поля с методами сравнения, которые будут нужны в методе вставки класса avlTree. От абстрактного класса наследовать класс рациональных чисел, которые по сути и будут служить информационным полем (ключом). Сделать все нужно так, чтобы технически от класса inform можно было наследовать любой другой класс, допустим, строк, со своими методами сравнения, и использовать строки как ключ без внесения изменений в остальной код (в avlTree, Tree, Node, avlNode...). Шаблоны использовать нельзя (!).

Вот классы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#pragma once
#include <iostream>
using namespace std;
 
class inform {
public:
    virtual bool operator <(inform&)=0;
    virtual bool operator >(inform&)=0;
    virtual bool operator ==(inform&)=0;
    virtual void Cout ()=0;
    virtual ~inform();
 
};
 
class rat: public inform{
    int a;
    int b;
    void reduct();
public:
    int compare(rat); //сравнить 2 рациональных
    bool operator <(inform&);
    bool operator >(inform&);
    bool operator ==(inform&);
    rat (int, int);
    rat(void);
    ~rat(void);
    void Cout ();
};
 
 
 
 
class Node {
    friend class Tree;
    friend class avlTree;
protected:
    Node * left;
    Node * right;
    inform& inf;
 
 
public: 
    Node (void);
    virtual ~Node (void);
};
 
class Tree{
protected:
    Node * root;
public:
    Tree(void);
    ~Tree(void);
    void preorder();
    void preorder (Node*);
    void inorder (Node*);
    void inorder ();
    void postorder ();
    void postorder (Node*);
    
};
 
 
 
class avlNode: public Node{
    friend class avlTree;
protected:
    int height;
public:
    avlNode(inform&);
    avlNode(void);
    virtual ~avlNode(void);
};
 
class avlTree: public Tree{
public:
    avlTree(void);
    avlTree(inform&);
    ~avlTree(void);
 
    void Delete(Node*);
    void Insert (inform&);
    avlNode* insert (inform&, avlNode*);
    void fixheight (avlNode*);
    unsigned char height(avlNode* );
    int bfactor(avlNode*);
    avlNode* balance(avlNode* );
    avlNode* rotateright(avlNode*);
    avlNode* rotateleft(avlNode*);
    avlNode* findmin(avlNode*);
    avlNode* removemin(avlNode*);
    avlNode* remove(avlNode*, inform&);
    void del (inform&);
    Node* fndmin();
    void Fndmin();
    Node* findmax();
    void Findmax();
};
При компиляции получаю ошибку:
error C2758: 'Node::inf' : must be initialized in constructor base/member initializer list
tree.h(40) : see declaration of 'Node::inf'
Конструктор для Node пустой, если честно, мне кажется, туда нечего писать. И вообще, не нравится требование к inform быть абстрактным, ведь создать экземпляр абстрактного класса нельзя, а для корректного использования в Node это и нужно!

Мне уже начинает казаться, что без шаблонов вторую часть создания не выполнить, но их использовать нельзя.
Может у кого-то есть мысли как избавиться от ошибки?
Весь код во вложении.
Tree.rar
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2013, 22:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при работе с потомками абстрактного класса (C++):

Ошибка при работе с объектом класса в конструкторе другого класса - C++
Имеется данный код: https://github.com/ubelian/glgame/tree/master/glgame В файле Food.cpp в конструкторе класса Food::Food() на 19...

Ошибка компиляции абстрактного класса - C++
public: Tour(); Tour(const char *, int, float); Tour(const Tour &amp;); Tour &amp; operator = (const Tour &amp;) = delete ; ~Tour(); ...

Ошибка в создании абстрактного класса - C++
есть абстрактный класс ID3DXAllocateHierarchy, на его основе создан класс CAllocateHierarchy: class CAllocateHierarchy: public...

Ошибка с памятью при работе класса и map - C++
В общем есть класс тест class test { public: test(void); ~test(void); test(const int&amp;); private:

Ошибка: невозможно создать объект абстрактного класса - C++
программа для заменны слова в файле, на введенное с клавы слово!реализовать нужно через интерфейс! ошибка в строчке Text edit; не...

Деструкторы при наследовании от абстрактного класса - C++
Нужно ли что то писать в деструкторах ~StringObject(){}; ~DoubleObject(){} и нужно ли создавать виртуальный деструктор класса...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2013, 22:07
Привет! Вот еще темы с ответами:

как исправить Ошибка 8 error C2259: Tabl: невозможно создать экземпляр абстрактного класса - C++
имеется абстрактный класс, у нее есть 4 виртуальных функций: запись и чтение с помощью С и С++ имеется класс Tabl производный от...

Связь между потомками класса - C++
Здравствуйте! У меня проблема: имеется класс, и у него есть 2 класса-потомки. Мне нужно с экземпляра первого класса-потомка получить...

Как обратится к обьекту класса, являющегося наследником абстрактного класса - C++
Здравствуйте! У меня есть 4 класса: один виртуальный, следующие 2 - наследуют виртуальный класс и последний класс содержит указатель на...

Поместить в динамически расширяемый массив объекты класса, производные от базового абстрактного класса - C++
Помогите пожалуйста новичку! (мне). Я хочу создать динамически расширяющийся массив указателей на базовый абстрактный класс,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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