Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
16 / 16 / 3
Регистрация: 06.02.2013
Сообщений: 57
1

Перегрузка круглых скобок как ravalue

30.06.2013, 13:26. Показов 2216. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не могу понять, как перегрузить () для того чтобы можно было использовать a(1, 2)=2; вместо a[1][2]=3;


ошибся, наверное не rvalue, а lvalue
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2013, 13:26
Ответы с готовыми решениями:

Вывести все корректные комбинации пар круглых скобок, которые можно сформировать из n скобок
Вывести все корректные комбинации пар круглых скобок, которые можно сформировать из n скобок,...

Баланс круглых скобок
Проверить, соблюдается ли в тексте баланс круглых скобок. Для каждой открывающей скобки ‘(‘ должна...

Проверить правильность расположения круглых скобок
Пусть задано множество строк. Проверить правильность расположения круглых скобок. Если скобки...

Проверить баланс круглых скобок, используя очередь
Добрый день. Преподавателем поставлена следующая задача: дан текстовый файл с программой на...

9
погромист
415 / 251 / 30
Регистрация: 27.08.2012
Сообщений: 550
30.06.2013, 13:41 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
#include <iostream>
class cls
{
    public:
        cls( int a = 1 ) : x( new int*[a] ) {
            for( int i = 0; i < a; i++ )
                x[i] = new int[a];
                
            for( int i = 0; i < a; i++ )
                for( int j = 0; j < a; j++ )
                    x[j][i] = 0;
        }
        
        int& operator()( int a, int b ) {
            return x[a][b];
        }
         
    private:
        int **x;
};
 
int main() {
    cls a( 5 );
    std::cout << a(3,4) << std::endl;
    a(3,4) = 5;
    std::cout << a(3,4) << std::endl;
    return 0;
}
1
16 / 16 / 3
Регистрация: 06.02.2013
Сообщений: 57
30.06.2013, 13:53  [ТС] 3
@coloc, т.е. скобки перегружаются как r и l value одновременно?
0
погромист
415 / 251 / 30
Регистрация: 27.08.2012
Сообщений: 550
30.06.2013, 14:03 4
@Simpson_, я перегрузил скобки как lvalue но можно как и rvalue

Добавлено через 2 минуты
вот rvalue
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
#include <iostream>
class cls
{
    public:
        cls( int a = 1 ) : x( new int*[a] ) {
            for( int i = 0; i < a; i++ )
                x[i] = new int[a];
                
            for( int i = 0; i < a; i++ )
                for( int j = 0; j < a; j++ )
                    x[j][i] = 0;
        }
        
        int operator()( int a, int b ) const {
            return x[a][b];
        }
         
    private:
        int **x;
};
 
int main() {
    cls a( 5 );
    std::cout << a(3,4) << std::endl;
    a(3,4) = 5; //îøèáêà - íå lvalue
    std::cout << a(3,4) << std::endl;
    return 0;
}
0
16 / 16 / 3
Регистрация: 06.02.2013
Сообщений: 57
30.06.2013, 14:10  [ТС] 5
@coloc, странно, у меня 1 вариант работает и так и так
C++
1
2
3
    a(1, 1)=1;
    int x=a(1, 1);
    cout<<x;
0
погромист
415 / 251 / 30
Регистрация: 27.08.2012
Сообщений: 550
30.06.2013, 14:12 6
@Simpson_, lvalue может стоять и слева и справа от присваивания, а rvalue только справа
1
16 / 16 / 3
Регистрация: 06.02.2013
Сообщений: 57
30.06.2013, 14:23  [ТС] 7
[undefined]coloc[/undefined], т.е. если перегрузить оператор как lvalue, то потом его можно использовать как rvalue?
0
погромист
415 / 251 / 30
Регистрация: 27.08.2012
Сообщений: 550
30.06.2013, 14:28 8
@Simpson_, читай 6 пост.
Кликните здесь для просмотра всего текста
Да, можно
1
16 / 16 / 3
Регистрация: 06.02.2013
Сообщений: 57
30.06.2013, 14:34  [ТС] 9
@coloc, я там понял, я к тому что, зачем в книге требуют перегрузить (), и так и, так.

в общем разобрался. Большое спасибо @coloc!!!
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
30.06.2013, 14:41 10
Цитата Сообщение от Simpson_ Посмотреть сообщение
я к тому что, зачем в книге требуют перегрузить (), и так и, так.
затем что перегрузка из поста №2 не будет работать для константных объектов, потому неоходимо делать две версии оператора (), для константных(пост №4) и не константных объектов(пост №2)
1
30.06.2013, 14:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2013, 14:41
Помогаю со студенческими работами здесь

Проверить правильность расстановки в тексте круглых скобок
Задача: Проверить правильность расстановки в тексте круглых скобок. #include &lt;iostream&gt;...

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

Разница инициализаций с помощью круглых и фигурных скобок
В чем разница между () и {} при инициализации указателя ? SharedPointer(): ptr{ nullptr },...

Вывести все корректные комбинации пар круглых скобок
Вывести все корректные комбинации пар круглых скобок, которые можно сформировать из n скобок,...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru