Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

перегрузка ++ для структуры

32K
29 ноября 2007 года
fun_phantom
3 / / 27.11.2007
есть структура struct Elem {int data
Elem *next} и оператор void operator ++(Elem **p){*p=(*p)->next} ругается компилятор мол оператор должен быт членом класса либо содержать операнд типа опрделяемого пользователем.мне даже препод не помог.подскажите че делать...
1.9K
29 ноября 2007 года
max_dark
256 / / 11.11.2005
Вот это откомпилилось
Код:
struct el {
    int data;
    struct el* next;
    el()
    {
        data=0;
        next=NULL;
    }
    struct el* operator++() {
        return (this->next);
    }
};

Но работает не так как хотелось бы
32K
29 ноября 2007 года
fun_phantom
3 / / 27.11.2007
благодарю.сяду за комп попробую.
1.9K
29 ноября 2007 года
max_dark
256 / / 11.11.2005
Вот максимум, что мне удалось добится
Код:
#include <iostream>

using namespace std;

struct el {
    int data;
    struct el* next;
    el()
    {
        data=0;
        next=NULL;
    }
};
struct el& operator++(struct el& p) {
    if(p.next)
        p=*p.next;
    return p;
}

int main () {
    struct el* a,*b;
    a=new struct el;
    b=a;
    a->next=new struct el;
    a->data=1;
    a->next->data=2;
    ++*a;
    cout<<a->data<<endl;
    delete b->next;
    delete b;
    return 0;
}
350
29 ноября 2007 года
cheburator
589 / / 01.06.2006
По сути, здесь обычный итератор нужен.
Код:
#define NULL 0
#include <iostream>

class Elem
{
public:
    Elem(int d, Elem *n = NULL) : data(d), next(n) {};
    class iterator
    {
    public:
        iterator(Elem *p) : ptr(p) {};
        iterator &operator ++() { ptr = ptr->next; return *this; };
        Elem *operator -> () { return ptr; };
        Elem &operator * () { return *ptr; };
    private:
        Elem *ptr;
    };
    int &operator * () { return data; };
private:
    int data;
    Elem  *next;
};


void main ()
{
    Elem e0 (0);
    Elem e1 (1, &e0); // Это начало списка
    Elem::iterator iter (&e1);
    std::cout << "e1: " << **iter << std::endl;
    std::cout << "e0: " << **++iter << std::endl;
};

А еще проще - использовать std::list.
3
29 ноября 2007 года
Green
4.8K / / 20.01.2000
Цитата: fun_phantom
есть структура struct Elem {int data
Elem *next} и оператор void operator ++(Elem **p){*p=(*p)->next} ругается компилятор мол оператор должен быт членом класса либо содержать операнд типа опрделяемого пользователем.мне даже препод не помог.подскажите че делать...



Оператор можно переопределять только для классов и структур.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог