Форум программистов, компьютерный форум 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 Нужно считать каждый из элементов(для первой строки, например, a, 10, 2, 2) в какие то переменные(скорее всего буду работать с указателями). Собственно, как это сделать? Есть мысль считать каждую строку в массив символов char, после чего из каждой...
C++ Текстовые файлы ( ср. арифметическое макс. и мин. элементов) Заданный текстовый файл f, компоненты которого являются целыми числами и записаны в строку через пробел. Написать программу, которая находит: a) среднее арифметическое максимального и минимального значений компонент файла f; b) сумму четных компонент файла f, находящихся в диапазоне от а до b (a и b заданные пользователем). http://www.cyberforum.ru/cpp-beginners/thread708683.html
C++ Неправильно делит
Вроде бы все правильно написал, но если b>60, то неправильно выделяет целое и остаток... Что не так? Подскажите пожалуйста. #include <iostream> #include <stdlib.h> using namespace std; main() { system ("chcp 1251"); system ("cls");
Замените все четные значения введённого с клавиатуры массива нулями и вывести скорректированные значения (с помощью указателей) C++
Дорогие форумчане! Помогите пожалуйста с заданием!:cry: Введите с клавиатуры данные в массив целого типа, выведите их на экран. Далее замените все четные значения нулями и выведите скорректированные данные массива на экран.:wall: это нужно сделать,используя указатели в C++ Заранее ОГРОМНОЕ...
C++ Удаление групп файлов из FileListBox http://www.cyberforum.ru/cpp-beginners/thread708628.html
Здравствуйте, возникла проблемка. Нужно удалить несколько выделенных файлов из FileListBox Следующий код удаляет только название файла но не сам файл. Пробовал также FileListBox1->DeleteSelected(); но тоже не подходит. Заранее спасибо за помощь. void __fastcall TForm6::Button4Click(TObject *Sender) {int i; for(i=0; i<=FileListBox1->Count-1; i++) {if(FileListBox1->Selected) { ...
C++ Множественное наследование Имеется множественное наследование в виде треугольника. Если в обоих базовых классах имеются поля с одинаковым названием и смыслом, может ли производный класс наследовать только одно из них? подробнее

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

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

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

Класс - 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 минут
Данная тема относится к ООП.
Подскажите, пожалуйста, как передать тип аргумента в перегруженный оператор.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 06:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru