Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2008, 21:40   #1
AskaL
Новичок
Джуниор
 
Регистрация: 26.12.2008
Сообщений: 2
Лампочка Вопрос про перегрузку

Мне задали программу "Полный ДЕК в связной памяти через классы", я сделал программу через двусвязный список, всё работает.
Я делаю перегрузку операторов >> , <<, но мне еще сказали сделать перегрузку оператора "сдвига" ,то есть оператора добавления и удаления в дек, которые будут использовать функции pushBEGIN , pushEND...
Я не совсем понял перегрузку чего сделать... что за оператор сдвига, помогите пожалуйста?

Код:
#include <iostream>
#include <iomanip>
using namespace std;

int k;

class mydec{
    friend ostream &operator<<(ostream&, mydec &);
    friend istream &operator>>(istream&, mydec &);
public:
    mydec();
    mydec(const mydec&);
    void pushBEGIN(int);
    void pushEND(int);
    int popBEGIN(int &);
    int popEND(int &);
    void print();
    void del();
    ~mydec();
private:
    struct dec
    {
        int body;
        struct dec *next,*prev;
    };
    struct dec *addr,*addre;
};

ostream &operator<<(ostream &output, mydec &q)
{
    int buf,m;
    if(k==3) m=q.popBEGIN(buf);
    else m=q.popEND(buf);
    if(m==1)cout<<"ERROR :: DEC nyCTOu :: ERROR"<<endl;
    else cout<<buf;
    return output;
}

istream &operator>>(istream &input, mydec &q)
{
    int buf;
    cin>>buf;
    if(k==1)q.pushBEGIN(buf);
    else q.pushEND(buf);
    return input;
}

mydec::mydec()
{
    addr=NULL;
    addre=NULL;
}

mydec::mydec(const mydec& a)
{
    struct dec *q,*n,*n2;
    bool b=true;
    q=a.addr;
    addr=NULL;
    while (q!=NULL)
    {
        n=new struct dec;
        n->body=q->body;
        n->next=NULL;
        if(b)
        {
            addr=n;
            b=false;
        }
        else n2->next=n;
        n2=n;

        q=q->next;
    }
}

mydec::~mydec() //деструктор
{
    del();
}

void mydec::pushBEGIN(int d)
{
    struct dec *a;
    a=new struct dec;
    a->next=addr;
    a->body=d;
    a->prev=NULL;
    if(addr==NULL) addre=a;
    else a->next->prev=a;
    addr=a;
}

void mydec::pushEND(int d)
{
    struct dec *a, *b;
    a=addr;
    if(a==NULL)
    {
        a=new struct dec;
        a->next=addr;
        a->body=d;
        a->prev=NULL;
        addr=a;
        addre=a;
    }
    else
    {
        a=new struct dec;
        a->next=NULL;
        a->body=d;
        a->prev=addre;
        addre->next=a;
        addre=a;
    }
}

int mydec::popBEGIN(int &d)
{
    struct dec *a;
    a=addr;
    if(addr!=NULL)
    {
        d=a->body;
        addr=addr->next;
        delete a;
        if(addr!=NULL)addr->prev=NULL;
        else addre=NULL;
        return 0;
    }
    else return 1;
}

int mydec::popEND(int &d)
{
    struct dec *a, *b;
    a=addr;
    if(a==NULL)
    return 1;
    else if (a->next==NULL)
    {
        d=a->body;
        delete a;
        addr=NULL;
        addre=NULL;
        return 0;
    }
    else
    {
        a=addre;
        d=a->body;
        addre=addre->prev;
        addre->next=NULL;
        delete a;
        return 0;
    }
}

void mydec::print()
{
    struct dec *a;
    a=addr;
    while(a!=NULL)
    {
        cout<<a->body<<endl;
        a=a->next;
    }
}

void mydec::del()
{
    struct dec *a;
    a=addr;
    while(a!=NULL)
    {
        addr=addr->next;
        delete a;
        a=addr;
    }
}

int main()
{
    mydec w;

    int key=9;
    int buf;
    while(key!=0)
    {
        cout<<"1-pushBEGIN;\n2-pushEND;\n3-popBEGIN;\n4-popEND;\n5-delete;\n6-print;\n7-exit\n";
        cin>>key;
        switch (key)
        {
            case 1:cout<<"insert value"<<endl;
            k=1;
            cin>>w;
            break;

            case 2:cout<<"insert value"<<endl;
            k=2;
            cin>>w;
            break;

            case 3:k=3;
            cout<<w<<endl;
            break;

            case 4:
            k=4;
            cout<<w<<endl;
            break;

            case 5:w.del();
            break;

            case 6:w.print();
            break;

            case 7:return 0;
            break;
        }
    }
    return 0;
}
AskaL вне форума Ответить с цитированием
Старый 30.12.2008, 16:49   #2
breate
Пользователь
 
Аватар для breate
 
Регистрация: 30.12.2008
Сообщений: 78
По умолчанию

ну так в чём проблема пиши перегрузку
binary operator <<(param,param)
он с иосом мешатся не будет тк иос разн фигня у тя будет
MyClass & operator <<(param,param)
а там
ostream & operator <<(ostream &os, param)


хотя я больше люблю инлайны
Моя работа - Создание сайтов
breate вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос про Gauge Diamand Компоненты Delphi 7 28.11.2013 13:11
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос про IP ЧИЖ Работа с сетью в Delphi 1 23.06.2008 13:53
Оптимизировать перегрузку операторов Иллидан Общие вопросы C/C++ 14 24.04.2008 11:18
У меня вопрос про базы данных,а точнее про таблицы!!! Alexij Общие вопросы Delphi 1 13.04.2008 23:24