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

Список. Перегрузка операций - C++

Восстановить пароль Регистрация
 
Ferus
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 13
26.11.2012, 01:00     Список. Перегрузка операций #1
Добрый день!

Возникла проблема с написанием одной перегрузки.

Вот все условие:

Класс - list. Дополнительно перегрузить следующие операции: () - удалить элемент в заданной позиции, например:
int i;
list L;
L(i);
() - добавить элемент в заданную позицию, например:
int i;
Type c;
list L;
L(с,i);
!= - проверка на неравенство; + - добавить элемент в начало (list+item).


У меня не получилось реализовать вот этот () - добавить элемент в заданную позицию, например:
int i;
Type c;
list L;
L(с,i);



Прилагаю сюда мой код + попытки написания данной перегрузки.

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
//list.h
class Element                              
{ 
public:
    Element* Prev;                           
    Element* Next;                           
    void*    Data;
    Element(Element* prev, void* data,  Element* next) 
    {
        Prev = prev;
        Data = data;
        Next = next;
    }  
}; 
class Object                     
{
public:
    Element* Head;          
    Element* GetFirst(){return Head;}; 
    Element* GetLast();               
    Element* Search (void* data);     //поиск
    int CountList();     //подсчитать количество элементов списка
 
    bool Insert(void *data);
    bool InsertEnd(void *data);
    bool Delete(Element* e);    
    bool Delete(void* data);   
    bool DeleteList();
 
    Object() {Head = NULL;};
 
    bool isListEmpty(){return (Head==NULL);};
    
    void operator+(int);   // добавить новый элемент в список
    void operator()(int i);  
    void operator()(char* c,int i);
    bool operator!=(Object);   // проверка на неравенство
 
 
};
Object Create();

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
#include "stdafx.h"
#include "List.h"
#include <iostream>
#include "string.h"
 
using namespace std;
 
bool Object::Insert(void* data)
{
    bool a=0;
    if (Head == NULL) Head = new Element(NULL,data,Head);
    else Head = (Head->Prev = new Element(NULL,data,Head)); 
    return a;
}
 
bool Object::InsertEnd(void* data)
{
    Element *a=GetLast();
    if (Head==NULL) Head = new Element(a,data,NULL);
    else GetLast()->Next=new Element(a,data,NULL);
    return true;
}
 
int Object::CountList()
{
    int a = 0;
    Element *rc=Head;
    while (rc!=NULL)
    {
        a++;
        rc=rc->Next;
    }
    return a;
}
 
Element* Object::Search (void* data)
{
    Element* rc  = Head;
    while((rc != NULL) && (rc->Data != data))rc = rc->Next;    
    return rc;   
}
 
bool  Object::Delete(Element* e)
{
    bool rc=0;
    if (rc = (e != NULL))
    {
        if (e->Next != NULL) e->Next->Prev = e->Prev; 
        if (e->Prev != NULL) e->Prev->Next = e->Next;
        else Head = e->Next; 
        delete e;
    }
    return rc;
}
 
bool Object::DeleteList()
{
    Element *e=GetFirst();
    while (Head->Next!=NULL)
    {
        e=GetFirst();
        Head=e->Next;
        delete e;
    }
    delete Head;
    return true;
}
 
bool Object::Delete(void* data)
{
    return Delete(Search(data));
};
 
Element* Object::GetLast()
{
Element* e = Head, *rc = e;
while (e != NULL)
{
    rc = e;
    e = e->Next;  
   };
   return rc;
}
Object Create() {return *(new Object());}
 
//перегрузка операторов
 
void Object::operator+(int data)
{
    if (Head == NULL) Head = new Element(NULL,(void*)data,Head);
    else Head = (Head->Prev = new Element(NULL,(void*)data,Head)); 
}
 
bool Object::operator!=(Object a)
{
    bool pr=true;
    Element *e1=this->GetFirst();
    Element *e2=a.GetFirst();
    if (this->CountList() == a.CountList()) return false;
    for (int i=0; i < this->CountList(); i++)
        if ((int)e1 -> Data == (int)e2 -> Data)
            pr=false;
    return pr;
}
 
 
 
void Object::operator()(int i)  // перегрузка удалить элемент в заданной позиции
{
if(i<this->CountList())
 {
  Element *rc=this->Head;
  for(int k=1;k<i;rc=rc->Next,k++);
  this->Delete(rc);
   }
else cout << "Количество элементов меньше переданного аргумента." << endl;
   }
 
 
void Object::operator()(char* c,int i)
{
    int k = 1;
    char* d ="int";
if (strcmp(c,d)){   
if(i<this->CountList())
 {
  Element *rc=this->Head;
  for(k; k < i;rc=rc->Next,k++){
    
        this->Insert(rc);
    
  }}
else cout << "Несоответствие!" << endl;
   }
}

Основная проблема в передаче типа элемента.

Добавлено через 7 часов 50 минут
Данная тема относится к ООП.
Подскажите, пожалуйста, как передать тип аргумента в перегруженный оператор.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2012, 01:00     Список. Перегрузка операций
Посмотрите здесь:

C++ Перегрузка операций.
C++ перегрузка операций С++
C++ Перегрузка операций << и >>
C++ Перегрузка операций!
Перегрузка операций C++
C++ Перегрузка операций
Перегрузка операций C++
C++ Перегрузка операций

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
26.11.2012, 03:06     Список. Перегрузка операций #2
Ferus, надо было изначально делать шаблонные классы
судя по этой записи
Цитата Сообщение от Ferus Посмотреть сообщение
Type c;
это от вас и требуется
Ferus
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 13
26.11.2012, 11:09  [ТС]     Список. Перегрузка операций #3
Шаблоны классов - это следующая лабораторная, т.е. в этой работе я не должен еще их использовать.
Yandex
Объявления
26.11.2012, 11:09     Список. Перегрузка операций
Ответ Создать тему
Опции темы

Текущее время: 09:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru