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

Классы, определение оператора [] - C++

Восстановить пароль Регистрация
 
goodle
2 / 2 / 0
Регистрация: 22.07.2012
Сообщений: 52
02.02.2013, 14:58     Классы, определение оператора [] #1
Добрый день, леди и джентльмены! Помогите со следующим вопросом:

Есть два класса (названия говорят за себя):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class DataMember
{
    public:
        long value;
        double time;
        double date;
    private:
 
};
class DataSet
{
    public:
        int add() {
            DataMember dtmb;
            DtSet.push_back(dtmb);
            int sz;
            return sz=DtSet.size()-1;
        }
        DataMember operator [] (int i) {if (i<DtSet.size()) {return DtSet[i];}}
        int size() {return DtSet.size();}
    private:
        vector < DataMember > DtSet;
};
И код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    long i=0;
    DataSet dt1;
    while(!query->Eof)
    {
        int id=dt1.add();
        float t1=(query->FieldByName("Close")->AsFloat);
        t1=(query->FieldByName("T")->AsFloat);
        t1=(query->FieldByName("D")->AsFloat);
        dt1[id].value=(query->FieldByName("Close")->AsFloat);
        dt1[id].time=(query->FieldByName("T")->AsFloat);
        dt1[id].date=(query->FieldByName("D")->AsFloat);
        i++;
        t1=dt1[id].value; //здесь я получаю 0, несмотря на то, что float t1=(query->FieldByName("Close")->AsFloat) !=0
        t1=dt1.size();
        query->Next();
    }
Почему после присвоения элементу датасета определенного значения при обращении к нему я получаю 0?
Спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.02.2013, 15:14     Классы, определение оператора [] #2
ваш оператор [] возвращает вам копию объкта, в 9-11 строках создаются и модифицируются 3 копии
goodle
2 / 2 / 0
Регистрация: 22.07.2012
Сообщений: 52
02.02.2013, 19:24  [ТС]     Классы, определение оператора [] #3
Цитата Сообщение от Jupiter Посмотреть сообщение
ваш оператор [] возвращает вам копию объкта, в 9-11 строках создаются и модифицируются 3 копии
Я так и думал, спасибо.

Добавлено через 4 часа 5 минут
Правильный вариант, если кому интересно:
C++
1
DataMember & operator [] (int i) {if (i<DtSet.size()) {return DtSet[i];}}
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.02.2013, 19:25     Классы, определение оператора [] #4
Цитата Сообщение от goodle Посмотреть сообщение
Правильный вариант, если кому интересно
да, а что будет если i >= size ?
goodle
2 / 2 / 0
Регистрация: 22.07.2012
Сообщений: 52
03.02.2013, 14:18  [ТС]     Классы, определение оператора [] #5
Цитата Сообщение от Jupiter Посмотреть сообщение
да, а что будет если i >= size ?
Я знаю о возможной ошибке в этом случае, просто решил потом приделать, сейчас некогда
Yandex
Объявления
03.02.2013, 14:18     Классы, определение оператора []
Ответ Создать тему
Опции темы

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