Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
4 / 4 / 0
Регистрация: 06.01.2012
Сообщений: 117
1

Как перегрузить оператор индексации для указателя

01.11.2012, 14:23. Показов 866. Ответов 2
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#define HIGH_H 0
#define LOW_H 1
#define OPEN_H 2
#define CLOSE_H 3
#define VOLUME_H 4
#define HER_H 5
class Candle
{
    double high,low,open,close,volume;
    QDateTime time;
public:
    Candle(double _close,double _open,double _high,double _low,double _volume,QDateTime _time);
    Candle::Candle();   
    double getClose();
    double getHigh();
    double getLow();
    double getOpen();
    double getVolume()
    {
        return volume;
    }
    QDateTime getTime();
    void setClose(double _close)
    {
        close=_close;
    }
    double operator[](int type)
    {       
        printf("\n Candle = %d",type);
        switch(type)
        {
          case HIGH_H :
            return high;
          case LOW_H :
              return low;
          case OPEN_H :
              return open;
          case CLOSE_H :
              return close;
          case VOLUME_H :
              return volume;
          default :
              return close;
        }
 
    }   
    void print();
    ~Candle(){};
};
 
 
 
class Data
{
protected:
    QVector<Candle> vec;
    int currPos;
public:
    Data(Data * _dt)
    {
        vec = _dt -> getVec();
    }
    Data(){};
    Data(QVector<Candle> &_vec)
    {
        vec = _vec;
        currPos = vec.size();
        printf("\n vec.size() = %d   currPos = %d",vec.size(),currPos);
    }
    Candle& operator[](int i)
    {
        printf("\n Data i = %d   currPos = %d  vec,sie()= %d",i,currPos, vec.size());
        if(i < currPos)
        {
            printf("\n next data");         
            return vec[i];
        }
        else
            return Candle :: Candle();
    }       
    int size()
    {
        if(currPos <= vec.size())
            return currPos;
        else
            return vec.size();
    }
    int getCurrPos()
    {
        return currPos;
    }
    QVector<Candle>& getVec()
    {
        return vec;
    }   
};
 
int main(int argc, char *argv[])
{   
    QApplication app(argc, argv);
    QVector <Candle> vec;
    Candle c1(1,2,3,4,5, QDateTime::fromString("M1d1y9800:01:02","'M'M'd'd'y'yyhh:mm:ss"));
    Candle c2(6,7,8,9,10, QDateTime::fromString("M1d1y9800:01:02","'M'M'd'd'y'yyhh:mm:ss"));
    Candle c3(11,12,13,14,15, QDateTime::fromString("M1d1y9800:01:02","'M'M'd'd'y'yyhh:mm:ss"));
    vec.push_back(c1);
    vec.push_back(c2);
    vec.push_back(c3);
    Data dt(vec);
    //Data *dt = new Data(vec); 
    printf("\n >>>>%f", dt[0][CLOSE_H]); 
    return app.exec(); 
 
}
 
Если переменную dt объявляю как объект, то все пашет, а если объявляю как указатель на объект фигня получается((((помогите, плиз!!!
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.11.2012, 14:23
Ответы с готовыми решениями:

Как перегрузить оператор для своего класса?
У меня есть класс, .h class Vertex { public: ~Vertex(); Vertex(); double GetX(); double...

Как перегрузить оператор [] для двумерного массива?
Здравствуйте! Есть класс матрица, где в приватном доступе есть Type** matrix. Как из тела...

Как перегрузить оператор [][] для разреженной матрицы?
как перегрузить оператор для разреженной матрицы?знаю, что такого оператора нет, есть только , но...

Как правильно перегрузить оператор для шаблона класса
Имеется такой шаблон: template&lt;int Low = 0, int High = 1000&gt; class Diapazon { }; Внутри...

2
~ Эврика! ~
1254 / 1003 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
01.11.2012, 14:26 2
C++
1
2
Data *dt = new Data(vec); 
printf("\n >>>>%f", (*dt)[0][CLOSE_H]);
1
4 / 4 / 0
Регистрация: 06.01.2012
Сообщений: 117
01.11.2012, 14:33  [ТС] 3
Спасибо)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.11.2012, 14:33

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Как перегрузить оператор вывода в поток для вектора?
Стало интересно реализовать подобный функционал, и конечно же ничего не работает. При этом коде:...

Как перегрузить оператор [] для map<string, int>?
map&lt;string, int&gt; m; map&lt;string, int&gt;::iterator at, begin, end; string msg; cout &lt;&lt; &quot;Enter...

Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор *
Помогите в следующем: Для класса шаблона следует перегрузить оператор присваивания, конструктор...

Как перегрузить оператор для класса. Хоть убейте, не могу
Нужно поэлементно скопировать строки. Поэлементно, потому что задания другие, но мне нужно хотя бы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.