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

Перегрузка оператора + - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Не компилируется http://www.cyberforum.ru/cpp-beginners/thread942583.html
В среде MS Visual не хочет компилироваться даже то,что создано мастером автоматически. Снизу скрин. Также еще один глупый вопрос. Насколько я понял в книгах Бьерна Страустрапа , Либерти(которого...
C++ Отследить изменение реестра Привет, есть ли рабочий пример или кто-то поделиться теорией создания чтоб отследить любое изменение в реестре ? http://www.cyberforum.ru/cpp-beginners/thread942510.html
C++ Исключение для чисто виртуальной функции
Читал вопросы на собеседованиях по С++ и столкнулся с pure virtual function call исключение. Объясните пожалуйста зачем это нужно ?! В моем понимании чист. вирт. функц. созданая для того что бы никто...
C++ Странное поведение при переопределении operator++
Всем привет! Изучая переопределения в С++ наткнулся на следующую непонятку: #include <iostream> using namespace std; class Car { int * itsage; public:
C++ Как написать максимально оптимизированную функцию поиска длинны строки? http://www.cyberforum.ru/cpp-beginners/thread942451.html
Мысль о максимально оптимизированной функции длинны строки, где строка это указатель на литерал типа char. Не будем использовать не std::string, не std::wstring, не wchar_t в функцию передается...
C++ Создание .exe Здравствуйте, я лишь неделю в программировании пытаюсь разбираться и соответственно вопросы мои могут показаться глупыми. Но столкнулся с проблемой что в Dev C++ что в NetBeans IDE при компеляции... подробнее

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

Перегрузка оператора + - C++

23.08.2013, 20:59. Просмотров 622. Ответов 18
Метки (Все метки)

Доброго времени суток. Есть программа, создающая связный список, который содержит числа по возрастанию
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#include <iostream>
 
enum {kIsSmaller, kIsSame, kIsLarger};
 
int Compare(int & itsval,int & val)
{
    if (itsval > val)
    return kIsLarger;
    if (itsval < val)
    return kIsSmaller;
    else
    return kIsSame;
}
 
class Node;
class OrdNode;
class HeadNode;
class TailNode;
 
class Node
{
    public:
        Node() {}
        virtual ~Node() {};
        virtual Node* Insert(int* theValue) {};
        virtual void Show() {}
    private:
};
 
class OrdNode : public Node
{
    public:
        OrdNode(int* theValue, Node* next);
        virtual ~OrdNode() {delete myValue; delete myNext;}
        virtual Node* Insert(int*  theValue);
        virtual void Show() {std::cout << *myValue << std::endl; myNext -> Show();}
        operator int() {return int(*myValue);}
   private:
        int* myValue;
        Node* myNext; 
};
 
OrdNode::OrdNode(int* theValue, Node* next):
    myValue(theValue),
    myNext(next)
{
}
 
Node* OrdNode::Insert(int* theValue)
{
    int result = Compare(*myValue, *theValue);
    
    switch(result)
    {
        case kIsSame:
        case kIsLarger:
            {
                OrdNode* newnode = new OrdNode(theValue,this);
                return newnode;
            }
        case kIsSmaller:
            myNext = myNext->Insert(theValue);
            return this;
    } 
}
 
class TailNode : public Node
{
    public:
        TailNode() {}
        ~TailNode(){}
        virtual Node* Insert(int* theValue);
        virtual void Show() {};
    private:
};
 
Node* TailNode::Insert(int* theValue)
{
    OrdNode* newnode = new OrdNode(theValue, this);
    return newnode;
}
 
class HeadNode : public Node
{
    public:
        HeadNode();
        ~HeadNode();
        virtual Node* Insert(int* theValue);
        virtual void Show() {myNext -> Show();}
    private:
        Node* myNext;
};
 
HeadNode::HeadNode()
{
    myNext = new TailNode;
}
 
HeadNode::~HeadNode()
{
    delete myNext;
}
 
Node* HeadNode::Insert(int* theValue)
{
    myNext = myNext -> Insert(theValue);
    return this;
}
 
class LList
{
    public:
        LList();
        ~LList();
        LList(const LList & rhs); 
        void Insert(int* theValue);
        void ShowAll();
        //LList operator+(int*  rhs);
        HeadNode* myHead;
    private:
        HeadNode* GetHead() const {return myHead;}
        
};
 
LList::LList(const LList & rhs)
{
    myHead = new HeadNode;
    myHead = rhs.GetHead();
}
/*
LList LList::operator+(int*  rhs)
{
     Insert(rhs);     
     return *this;
}*/
 
LList::LList()
{
    myHead = new HeadNode;
}
 
LList::~LList()
{
    delete myHead;
    myHead = 0;
}
 
void LList::Insert(int* theValue)
{
    myHead -> Insert(theValue);
}
 
void LList::ShowAll()
{
    myHead->Show();    
}
 
int main()
{
    system("chcp 1251");
    system("cls");
    LList list;
    list = list + 1;
    list.ShowAll();
    system("pause");
    return 0;
}
OrdNode - класс для промежуточных узлов, содержащих данные. HeadNode и TailNoid - классы для головного и хвостового узлов. Класс LList - добавляет данные в список в процедуре Insert. Как перегрузить оператор сложения в классе LList, чтобы можно было добавлять числа в список операцией типа list = list + p, где p - указатель на переменную? С тем что есть сейчас (выделено комментариями) программа вылетает при запуске
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru