Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с преобразованием типов 
V
    Опции темы
nerezus
Дата 12.9.2007, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Имеем код:
Код

#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_ будут генерироваться автоматически

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

Это сообщение отредактировал(а) nerezus - 12.9.2007, 18:45


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Great
Дата 12.9.2007, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 3.12.2006

Репутация: 1
Всего: 1



переопредели оператор приведения к типу int
PM MAIL   Вверх
nerezus
Дата 12.9.2007, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Код

    operator int() {
     return val;
    }


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


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
zkv
Дата 12.9.2007, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



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

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

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

PM MAIL   Вверх
FREEDEV
Дата 12.9.2007, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 6.3.2007
Где: Украина->Одесс а

Репутация: нет
Всего: 3



Код

class int_ {
public:
    int val;

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

--------------------
Microsoft Windows Visla ©
PM MAIL   Вверх
nerezus
Дата 12.9.2007, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



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

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

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


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
powerfox
Дата 12.9.2007, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 97



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



--------------------
user posted image
PM WWW   Вверх
nerezus
Дата 12.9.2007, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Цитата

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


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Daevaorn
Дата 12.9.2007, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



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

Удачи тебе в этом нелегком и абсолютно бессмысленном труде.
PM MAIL WWW   Вверх
nerezus
Дата 12.9.2007, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Цитата

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


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
powerfox
Дата 13.9.2007, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 97



nerezus, удачи! Какой курс?


--------------------
user posted image
PM WWW   Вверх
nerezus
Дата 13.9.2007, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



powerfox, уже 3ий.... сделал сабж.

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


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1179 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.