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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Чтение из текстового файла http://www.cyberforum.ru/cpp-beginners/thread708693.html
Добрый день. Проблема моя в следующем: есть текстовой файл примерно следующего содержания a 10 2 2 b 5 5 1 c 3 7 0 d 5 22 0 e 3 22 1 f 5 25 2 Нужно считать каждый из элементов(для первой...
C++ Текстовые файлы ( ср. арифметическое макс. и мин. элементов) Заданный текстовый файл f, компоненты которого являются целыми числами и записаны в строку через пробел. Написать программу, которая находит: a) среднее арифметическое максимального и минимального... http://www.cyberforum.ru/cpp-beginners/thread708683.html
C++ Неправильно делит
Вроде бы все правильно написал, но если b>60, то неправильно выделяет целое и остаток... Что не так? Подскажите пожалуйста. #include <iostream> #include <stdlib.h> using namespace std; main() {...
Замените все четные значения введённого с клавиатуры массива нулями и вывести скорректированные значения (с помощью указателей) C++
Дорогие форумчане! Помогите пожалуйста с заданием!:cry: Введите с клавиатуры данные в массив целого типа, выведите их на экран. Далее замените все...
C++ Удаление групп файлов из FileListBox http://www.cyberforum.ru/cpp-beginners/thread708628.html
Здравствуйте, возникла проблемка. Нужно удалить несколько выделенных файлов из FileListBox Следующий код удаляет только название файла но не сам файл. Пробовал также FileListBox1->DeleteSelected();...
C++ Множественное наследование Имеется множественное наследование в виде треугольника. Если в обоих базовых классах имеются поля с одинаковым названием и смыслом, может ли производный класс наследовать только одно из них? подробнее

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

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

26.11.2012, 01:00. Просмотров 630. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru