Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Eraston
59 / 11 / 3
Регистрация: 09.09.2014
Сообщений: 130
1

Индексация в operator[] через структуру

11.09.2017, 22:32. Просмотров 202. Ответов 4
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class type{
    //...
}
struct point{
    int i, j;
}
class A{
private:
    type*** data;
public:
    type* operator[](const point&v){
        //...
    }
}
//...
void main(){
    //...
    A R;
    point p = { 5, 7 };
    type* t = R[p];// такое вообще возможно реализовать?
    //...
}
Логика: R должен выбрать элемент из data по параметрам p
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2017, 22:32
Ответы с готовыми решениями:

Вызов operator[] через operator[] const
Перелистывал Майерса, наткнулся на код, подскажите пожалуйста почему он...

Реализация operator + через operator +=
внутри следующей темы возник вопрос, ответ на который так и не был получен:...

Operator +, operator += — какой через какой реализовывать?
Для class Fraction { // ... public: Fraction operator + ( const...

Ввод данных в структуру через указатель на структуру
#include "stdafx.h" #include "ctime" #include "iostream" #pragma...

Обработка переменных через функцию operator(){.}
Вообщем, есть несколько переменных и массивов. Они задаются в в главной части...

4
Eraston
59 / 11 / 3
Регистрация: 09.09.2014
Сообщений: 130
11.09.2017, 22:41  [ТС] 2
Двумерный массив указателей.
operator() тоже подошел бы.

Суть в том, чтобы класс R при команде R[point] или R(point) возвращал элемент данных (указатель из двумерного массива указателей)

И работала такая конструкция:

C++
1
R({5,7})->Function()
0
dopleref
42 / 52 / 33
Регистрация: 15.12.2015
Сообщений: 196
12.09.2017, 07:02 3
Накидал пример с доступом через оператор [], о котором Вы говорили:
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
#include <iostream>
 
using namespace std;
 
class type {
private:
    int i_;
    int j_;
public:
    type(int i, int j) : i_(i), j_(j) {};
    void print() {
        cout << "hello, object (" << i_ << ", " << j_ << ")\n";
    }
};
 
struct point {
    int i;
    int j;
};
 
class A {
private:
    type*** data;
    int N = 2;
    int M = 3;
public:
    A() { 
        data = new type**[N];
        for (int i = 0; i < N; i++) {
            data[i] = new type*[M];
            for (int j = 0; j < M; j++) {
                data[i][j] = new type(i, j);
            }
        }
    }
    type* operator[](const point& v) {
        // нужна проверка, что элемент существует
        return data[v.i][v.j];
    }
};
 
 
int main() {
    A a;
    a[{1,2}]->print();
    return 0;
}
0
Eraston
59 / 11 / 3
Регистрация: 09.09.2014
Сообщений: 130
13.09.2017, 21:52  [ТС] 4
dopleref, спасибо, насколько я мог понять, перегрузить [] для указателя невозможно или слишком геморно, да и, по логике, для динамических данных лучше создавать подобный оберточный управляющий класс, который еще и границы проверит.
0
dopleref
42 / 52 / 33
Регистрация: 15.12.2015
Сообщений: 196
15.09.2017, 07:09 5
Eraston, я знаю только как перегрузить оператор для пользовательского типа данных,
что значить перегрузить [] для указателя? думаю что это невозможно сделать.
Динамические данные удобно создавать в конструкторе класса, с последующим освобождением
памяти в деструкторе, по идее в моем примере не хватает еще деструктора освобождающего память.
0
15.09.2017, 07:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2017, 07:09

Class & operator's |Error: undefined reference to operator
Компилирует нормально, но когда хочу использовать оператор выдает...

operator char() или operator int()
Здорова госпдо! Снова ничо не ясно как всегда. Разбираю программку из книги...

Индексация массива класса, через объект этого класса
class A{ char c;//? - размер массива public: A(int C){c;} }; int...


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

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

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