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

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

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

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

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

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


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

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

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

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

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

Проверить правильность расстановки в тексте круглых скобок - C++
Задача: Проверить правильность расстановки в тексте круглых скобок. #include <iostream> #include <cstring> using namespace...

Что означает const после круглых скобок функции - C++
всем привет. скажите, а что здесь значит const? int func(int var) const { return get; }

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

в общем разобрался. Большое спасибо @coloc!!!
0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
30.06.2013, 14:41 #10
Цитата Сообщение от Simpson_ Посмотреть сообщение
я к тому что, зачем в книге требуют перегрузить (), и так и, так.
затем что перегрузка из поста №2 не будет работать для константных объектов, потому неоходимо делать две версии оператора (), для константных(пост №4) и не константных объектов(пост №2)
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2013, 14:41
Привет! Вот еще темы с ответами:

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

Проверить правильность расстановки в тексте круглых скобок. Текст заканчивается точкой - C++
Работает,но неправильно. Сделала конечным автоматом. Помогите, пожалуйста! #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;cmath&gt; ...

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

Написать рекурсивную функцию, проверяющую правильность расстановки круглых скобок в строке - C++
Написать рекурсивную функцию, проверяющую правильность расстановки круглых скобок в данной строке.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.06.2013, 14:41
Ответ Создать тему
Опции темы

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