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

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

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

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

26.11.2012, 01:00. Просмотров 646. Ответов 2
Метки нет (Все метки)

Добрый день!

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

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

Класс - 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 минут
Данная тема относится к ООП.
Подскажите, пожалуйста, как передать тип аргумента в перегруженный оператор.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2012, 01:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Список. Перегрузка операций (C++):

ПЕРЕГРУЗКА ОПЕРАЦИЙ - C++
Не знаю как делать задания( Прошу помощи 1) Ввести класс для работы с объектом «полином». Реализовать операции: a. сложение двух...

Перегрузка операций - C++
Цитата из Р. Лафоре &quot;Объекто-ориентированное программирование в C++&quot;: Далее идет пример: #include &lt;iostream&gt; using namespace...

Перегрузка операций - C++
Добрый день! Задание простенькое но не могу решить так как не получается перегрузка операций. Задание: Вычислить точное значение суммы...

Перегрузка операций - C++
Друзья, помогите с перегрузкой некоторых операций, пожалуйста) Задание: Есть угол на плоскости(поля угол и минуты). Перегрузить...

Перегрузка операций - C++
Здравствуйте. Объясните механизма операции инкремента. Как работают эти строки: Counter(int c) : count(c) { } return Counter(count); ...

Перегрузка операций. - C++
Предусмотреть ввод исходных данных с клавиатуры, файла и используя датчик случайных чисел. Написать тестовую программу. Построить класс,...

2
I.M.
566 / 549 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
26.11.2012, 03:06 #2
Ferus, надо было изначально делать шаблонные классы
судя по этой записи
Цитата Сообщение от Ferus Посмотреть сообщение
Type c;
это от вас и требуется
0
Ferus
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 13
26.11.2012, 11:09  [ТС] #3
Шаблоны классов - это следующая лабораторная, т.е. в этой работе я не должен еще их использовать.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2012, 11:09
Привет! Вот еще темы с ответами:

Перегрузка операций - C++
#include &lt;iostream&gt; using namespace std; class chislo { public: chislo(); chislo(int a,int b); chislo(const chislo&amp;); ...

ПЕРЕГРУЗКА ОПЕРАЦИЙ - C++
Всем добрый день.Нужна помощь по перегрузкам операций.Написать программу.Кто сможет помочь,буду очень признательна.Спасибо. 1. Выбрать...

Перегрузка операций - C++
Здравствуйте, помогите реализовать программу: Класс - множество set. Дополнительно перегрузить следующие операции: + - добавить элемент в...

перегрузка операций С++ - C++
Доброй ночи. Товарищи помогите пожалуйста, нужно срочно сдать лабораторную, а я никак не освою новый материал, негде даже нормальных...


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

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

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