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

Перегрузка функций - C++

Восстановить пароль Регистрация
 
Romich41
 Аватар для Romich41
15 / 15 / 1
Регистрация: 01.11.2009
Сообщений: 188
30.03.2010, 17:47     Перегрузка функций #1
Здравствуйте!!! я не однократно просил помочь на этом форуме...именно с перегрузкой стека!!!
Потому что все мои попытки самостоятельно справиться с решение этой задичи потерпели крах...=)
Помогите плиз...
НЕОБХОДИМО перегрузить ТРИ функции стека: добавление элемента, удаление элемента, проверка на наличие элементов.
Вот мой класс СТЕК с 3-мя функциями...

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
#include <iostream>
using namespace std;
//////////////////////// 
// описание класса  
//////////////////////// 
class Stack{
private:
      int *data; //будет массив нпример для типа int
      int index, maxsize;
public:
    int x;
    Stack();                 // пустой конструктор
    Stack(float initial);    // конструктор с параметрами
    Stack(const Stack& st);    // конструктор копирования
    ~Stack() {}                  //деструктор     
    //перегрузка операций, доступ по индексу
    float   operator () (const int index_x,const int index_y); 
    // присваивание числа 
    Stack  operator +  (const float value); //добавление элемента в стек
    Stack  operator -  (const float value); //удаление элементов из стека
    bool    operator == (const Stack& st); //проверка на наличие элементов в стеке
//////////////////////// 
// реализация класса  
////////////////////////    
 
Stack Stack::operator + (const Stack& st) { 
  Stack tmp; 
      if (index+1<=maxsize)
               {
                   index++;
                   data[index]=x; 
               }
                else cout << "Stack overflow\n";
  return tmp; 
} 
 
Stack Stack::operator - (const Stack& st) { 
  Stack tmp; 
         if (index-1>=0)index--;
              else cout<<"Stack underflow\n";
  return tmp; 
} 
    
bool Stack::operator == (const Stack& st) { 
 return index==0;
} 
     
};
int main()
{
 // небольшой тест написанного класса   
      return 0;
}
Люди ну просто очень нужно....
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2010, 17:47     Перегрузка функций
Посмотрите здесь:

C++ Перегрузка функций
C++ Перегрузка функций
Перегрузка функций C++
Перегрузка функций C++
Перегрузка функций C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
30.03.2010, 17:55     Перегрузка функций #2
Стек - это односвязный линейный список типа LIFO. Оформи функции push, pop и isEmpty как операторы, и будет тебе щастье:
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
class stack
{
public:
    stack();
    ~stack();
    void push(int i);
    int pop();
    size_t size();
    bool isEmpty();//Стек пуст?
private:
    //Структура, описывающая элемент стека
    struct node
    {
        int     val;
        node*   next;
    };
    node*   top;//Вершина
    size_t  _size;//Размер
};
 
stack::stack()
    : top(NULL), _size(0)
{}
 
stack::~stack()
{
    while(top)
    {
        node* ptr=top;
        top=top->next;
        delete ptr;
    }
}
        
void stack::push(int i)
{
    if(top)//Если в стеке уже есть элементы
    {
        node* ptr=new node;
        ptr->val=i;
        ptr->next=top;
        top=ptr;
    }
    else//Если стек пуст
    {
        top=new node;
        top->next=NULL;
        top->val=i;
    }
    ++_size;
}
 
int stack::pop()
{
    //Если top==NULL (т.е. стек пуст), то возбуждается исключение
    if(!top)
        throw(std::exception("Ошибка удаления: стек пуст"));
    node* ptr=top;
    top=top->next;
    int retval=ptr->val;
    delete ptr;
    --_size;
    return retval;
}
 
inline size_t stack::size()
{
    return _size;
}
 
inline bool stack::isEmpty()
{
    return _size==0;
}
Romich41
 Аватар для Romich41
15 / 15 / 1
Регистрация: 01.11.2009
Сообщений: 188
30.03.2010, 20:16  [ТС]     Перегрузка функций #3
ммм...туплю=(

Добавлено через 19 минут
Nameless One, можешь помочь????
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
30.03.2010, 20:28     Перегрузка функций #4
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
#include <iostream>
 
class stack
{
public:
        stack();
        ~stack();
        void operator+(int i);
        void operator-(int& i);
        size_t size();
        bool operator()();
private:
        //Структура, описывающая элемент стека
        struct node
        {
                int             val;
                node*   next;
        };
        node*   top;//Вершина
        size_t  _size;//Размер
};
 
stack::stack()
        : top(NULL), _size(0)
{}
 
stack::~stack()
{
        while(top)
        {
                node* ptr=top;
                top=top->next;
                delete ptr;
        }
}
                
void stack::operator+(int i)//Добавление элемента в стек
{
        if(top)//Если в стеке уже есть элементы
        {
                node* ptr=new node;
                ptr->val=i;
                ptr->next=top;
                top=ptr;
        }
        else//Если стек пуст
        {
                top=new node;
                top->next=NULL;
                top->val=i;
        }
        ++_size;
}
 
void stack::operator-(int& i)//Извлечение элемента из стека
{
        //Если top==NULL (т.е. стек пуст), то возбуждается исключение
        if(!top)
                throw(std::exception("Ошибка удаления: стек пуст"));
        node* ptr=top;
        top=top->next;
        i=ptr->val;
        delete ptr;
        --_size;
}
 
inline size_t stack::size()
{
        return _size;
}
 
inline bool stack::operator()()//Проверка на наличие элементов
{
        return _size==0;
}
 
int main()
{
    try
    {
        stack s;
        for(size_t i=0; i<10; ++i)
        {
            s+i;
            std::cout << i << " ";
        }
        std::cout << std::endl;
        while(!s())
        {
            int i;
            s-i;
            std::cout << i << " ";
        }
        std::cout << std::endl;
    }
    catch(std::exception& e)
    {
        std::cout << e.what() << std::endl;
        system("pause");
        return 1;
    }
    system("pause");
    return 0;
}
Yandex
Объявления
30.03.2010, 20:28     Перегрузка функций
Ответ Создать тему
Опции темы

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