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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Simpson_
15 / 15 / 3
Регистрация: 06.02.2013
Сообщений: 55
#1

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

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

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


ошибся, наверное не rvalue, а lvalue
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2013, 13:26     Перегрузка круглых скобок как ravalue
Посмотрите здесь:

Баланс круглых скобок C++
C++ Дана строка символов проверить правильность расстановки круглых и квадратных скобок в выражениях
Что означает const после круглых скобок функции C++
C++ Строки. Проверить правильность задания круглых скобок
C++ Проверить программу на соответствие числа открывающихся и закрывающихся круглых и фигурных скобок
Проверка записи на соответствие условию: правильная скобочная запись из круглых и квадратных скобок C++
Проверить правильность расстановки в тексте круглых скобок C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
coloc
погромист
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
30.06.2013, 13:41     Перегрузка круглых скобок как ravalue #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;
}
Simpson_
15 / 15 / 3
Регистрация: 06.02.2013
Сообщений: 55
30.06.2013, 13:53  [ТС]     Перегрузка круглых скобок как ravalue #3
@coloc, т.е. скобки перегружаются как r и l value одновременно?
coloc
погромист
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
30.06.2013, 14:03     Перегрузка круглых скобок как ravalue #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;
}
Simpson_
15 / 15 / 3
Регистрация: 06.02.2013
Сообщений: 55
30.06.2013, 14:10  [ТС]     Перегрузка круглых скобок как ravalue #5
@coloc, странно, у меня 1 вариант работает и так и так
C++
1
2
3
    a(1, 1)=1;
    int x=a(1, 1);
    cout<<x;
coloc
погромист
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
30.06.2013, 14:12     Перегрузка круглых скобок как ravalue #6
@Simpson_, lvalue может стоять и слева и справа от присваивания, а rvalue только справа
Simpson_
15 / 15 / 3
Регистрация: 06.02.2013
Сообщений: 55
30.06.2013, 14:23  [ТС]     Перегрузка круглых скобок как ravalue #7
[undefined]coloc[/undefined], т.е. если перегрузить оператор как lvalue, то потом его можно использовать как rvalue?
coloc
погромист
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
30.06.2013, 14:28     Перегрузка круглых скобок как ravalue #8
@Simpson_, читай 6 пост.
Кликните здесь для просмотра всего текста
Да, можно
Simpson_
15 / 15 / 3
Регистрация: 06.02.2013
Сообщений: 55
30.06.2013, 14:34  [ТС]     Перегрузка круглых скобок как ravalue #9
@coloc, я там понял, я к тому что, зачем в книге требуют перегрузить (), и так и, так.

в общем разобрался. Большое спасибо @coloc!!!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2013, 14:41     Перегрузка круглых скобок как ravalue
Еще ссылки по теме:

Написать рекурсивную функцию, проверяющую правильность расстановки круглых скобок в строке C++
C++ Проверить баланс круглых скобок, используя очередь
C++ Проверить правильность расстановки в тексте круглых скобок (конечный автомат)
C++ Проверить правильность расстановки в тексте круглых скобок. Текст заканчивается точкой
Проверить правильность расположения круглых скобок C++

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

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт C++
6549 / 3969 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
30.06.2013, 14:41     Перегрузка круглых скобок как ravalue #10
Цитата Сообщение от Simpson_ Посмотреть сообщение
я к тому что, зачем в книге требуют перегрузить (), и так и, так.
затем что перегрузка из поста №2 не будет работать для константных объектов, потому неоходимо делать две версии оператора (), для константных(пост №4) и не константных объектов(пост №2)
Yandex
Объявления
30.06.2013, 14:41     Перегрузка круглых скобок как ravalue
Ответ Создать тему
Опции темы

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