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

Перегрузка operator[][][] - C++

Восстановить пароль Регистрация
 
 
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
31.08.2013, 15:32     Перегрузка operator[][][] #1
Здорова господа!!!

Как перегрузить operator[][] для класса или operator[][][] ???

Что нужно из него возвращать?
От что то пытался но не получается:
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 std::cout;
using std::endl;
 
class cl
{
    int mass[3][3];
    int kkk;
public:
    cl(int a)
    {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                mass[i][j]=a;
    }
    void print()
    {
        for(int i=0;i<3;i++)
        {
            for(int j=0;j<3;j++)
                cout <<mass[i][j]<<' ';
            cout <<endl;
        }
    }
 
    int& operator[](int i)
    {
        if(kkk==-1)
        {
            kkk=i;
        }
        else if(kkk!=-1)
        {
            return mass[kkk][i];
        }
    }
};
 
int main()
{
    cl k(3);
    k.print();
 
    k[0][0]
 
    return 0;
}
Добавлено через 1 минуту
Что то мне кажется но нужно использовать оператор приведения типа чтоли????
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.08.2013, 15:32     Перегрузка operator[][][]
Посмотрите здесь:

C++ Перегрузка operator+
C++ перегрузка operator<<
Перегрузка operator= C++
C++ Перегрузка operator new
Перегрузка operator+ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
01.09.2013, 13:26     Перегрузка operator[][][] #21
Цитата Сообщение от ninja2 Посмотреть сообщение
Тут еще непонятка возникла как от освобождать память для моего примера кода выше?
Точно так же, как выделял память, только в обратном порядке.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
01.09.2013, 14:04  [ТС]     Перегрузка operator[][][] #22
Цитата Сообщение от Nameless One Посмотреть сообщение
Точно так же, как выделял память, только в обратном порядке.
Ну смотри отак я 100% уверен что память освободится:
C++
1
2
3
4
5
6
7
8
9
10
11
12
~cl()
    {
    for(int i=0;i<a;i++)
        {
            for(int j=0;j<b;j++)
            {
                delete[] p[i][j];
            }
            delete[] p[i];
        }
        delete[] p;
    };
А если я утак:
C++
1
2
3
4
~cl()
    {
        delete[] p;
    };
Мб все таки она так же автоматом удалится?????

Добавлено через 32 минуты
Ну так что господа вы наверно вопрос не поняли?

Щас я повторю!!!
От имеется у нас класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class cl
{
    int*** p;
    int a;
    int b;
    int c;
public:
    cl(int aa,int bb, int cc)
        :a(aa),
        b(bb),
        c(cc)
    {
        p=new int** [a];
        for(int i=0;i<a;i++) 
        {
            p[i]=new int* [b];
            for(int j=0;j<b;j++)
                p[i][j]=new int[c];
        }
    }
};
В конструкторе выделяется память под трехмерный массив, как мне правильно определить деструктор???

От если я так определю то 100% освобождается память!!!
C++
1
2
3
4
5
6
7
8
9
10
11
12
    ~cl()
    {
    for(int i=0;i<a;i++)
        {
            for(int j=0;j<b;j++)
            {
                delete[] p[i][j];
            }
            delete[] p[i];
        }
        delete[] p;
    };
Ну зачем заморачиваться мб можно попроще отак сделать????
C++
1
2
3
4
    ~cl()
    {
        delete[] p;
    };
Да и все дела????
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
01.09.2013, 14:06     Перегрузка operator[][][] #23
Цитата Сообщение от ninja2 Посмотреть сообщение
Да и все дела????
Так ты удалишь лишь часть выделенной памяти. Не всю.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.09.2013, 14:12     Перегрузка operator[][][] #24
Цитата Сообщение от ninja2 Посмотреть сообщение
Ну зачем заморачиваться
Этот вопрос стоило себе задать, до начала изучения С++.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2013, 14:32     Перегрузка operator[][][]
Еще ссылки по теме:

Перегрузка operator-> () C++
Перегрузка operator[]= C++
C++ Перегрузка operator<()

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

Или воспользуйтесь поиском по форуму:
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
01.09.2013, 14:32     Перегрузка operator[][][] #25
Цитата Сообщение от ninja2 Посмотреть сообщение
Ну смотри отак я 100% уверен что память освободится:
Да.

Цитата Сообщение от ninja2 Посмотреть сообщение
Мб все таки она так же автоматом удалится?????
Нет.
Yandex
Объявления
01.09.2013, 14:32     Перегрузка operator[][][]
Ответ Создать тему
Опции темы

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