Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Проблема с преобразованием типов


Автор: nerezus 12.9.2007, 18:44
Имеем код:
Код

#include <iostream>

class Test{
public:
    int a;    
};

int main () {
    Test t;
    t.a = 10;
    int b = t.a;
    return 0;
}


Теперь мне надо сделать так, чтобы при изменении a в классе тест происходило некоторое действие. Меняем код:

Код

#include <iostream>

class int_ {
public:
    int val;
    
    int operator=(int v) {
     // ДЕЙСТВИЕ БУДЕТ ТУТ
     val = v;
     return val;
    }
    
};

class Test{
public:
    int_ a;    
};

int main () {
    Test t;
    t.a = 10;
    int b = t.a; // ошибка: возвращает int_ а не int
    return 0;
}

ошибка: возвращает int_ а не int
Как исправить?

P.S. классы типа int_ будут генерироваться автоматически

Как решить проблему такого рода?

Автор: Great 12.9.2007, 18:55
переопредели оператор приведения к типу int

Автор: nerezus 12.9.2007, 18:55
Код

    operator int() {
     return val;
    }


вроде проблема решена, сейчас попробуй автоматизировать )

Автор: zkv 12.9.2007, 18:55
Цитата(nerezus @  12.9.2007,  18:44 Найти цитируемый пост)
 int operator=(int v) {
     // ДЕЙСТВИЕ БУДЕТ ТУТ
     val = v;
     return val;
    }

не совсем понял, может это имел ввиду:
Код

operator int () 
{
     // ДЕЙСТВИЕ БУДЕТ ТУТ
     return val;
}

Автор: FREEDEV 12.9.2007, 19:00
Код

class int_ {
public:
    int val;

    int operator=(int v) {
        // ДЕЙСТВИЕ БУДЕТ ТУТ
        val = v;
        return val;
    }
    operator int()
    {
        return val;
    }
};

Автор: nerezus 12.9.2007, 19:02
Я просто не думал, что можно сделать преобразование типа перегруженным 0_0

Сейчас пишу скрипт для автоматизации сабжа...

Уже сделаны анализаторы и кодогенератор...
Делаю добавление в С++ геттеров, сеттеров и ассертов.

Автор: powerfox 12.9.2007, 19:03
nerezus, если честно, то я не понял сути манипуляции с операторами (что происходит - ясно, но зачем именно так?). Почему не сделать метод setA(int new_A_value)?

Автор: nerezus 12.9.2007, 19:06
Цитата

Почему не сделать метод setA(int new_A_value)?
 Это примерно и должно происходить. Но автоматически.

Автор: Daevaorn 12.9.2007, 21:38
Цитата(nerezus @  12.9.2007,  20:02 Найти цитируемый пост)
Делаю добавление в С++ геттеров, сеттеров и ассертов. 

Удачи тебе в этом нелегком и абсолютно бессмысленном труде.

Автор: nerezus 12.9.2007, 21:51
Цитата

и абсолютно бессмысленном труде.
 я ДОЛЖЕН сделать до завтрашнего утра сабж =]
ибо в универе дали задание =) еще на летнюю практику.... сейчас будем творить =))

Автор: powerfox 13.9.2007, 15:43
nerezus, удачи! Какой курс?

Автор: nerezus 13.9.2007, 18:22
powerfox, уже 3ий.... сделал сабж.

Код не покажу, т.к. стыдно(писал тяп-ляп, лишь бы успеть). 600 строк на питоне.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)