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

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

Войти
Регистрация
Восстановить пароль
 
Seatless
1 / 1 / 0
Регистрация: 19.06.2011
Сообщений: 24
#1

Обращение к объекту с помощью перегруженной операции - C++

26.07.2011, 17:35. Просмотров 388. Ответов 4
Метки нет (Все метки)

У меня есть перегруженная операция (), возвращающая rvalue
C++
1
2
3
4
5
6
7
8
9
10
11
int Array::operator()( int a, int b ) const
{
    if ( a < 0 || b < 0 || a >= row || b >= column )
    {
        cerr << "\nError: one of subscriptes is out of range\n";
        exit( 1 );
    }
 
    else
        return ptr[ a * ( column + 1 ) + b ];
}
(по заданию нужно, чтобы в динамическом одномерном массиве int *ptr размерами row*column хранился 2х-мерный массив и к его элементам можно было бы обращаться таким образом: arr( 1, 3 ), например.) Так вот как можно обратиться через эти перегруженные скобки к текущему объекту? Например в операции сравнения на равенство:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool Array::operator==( Array &arr ) const
{
    if ( row == arr.row && column == arr.column )
    {
        for ( int i = 0; i < row; i++ )
            for ( int j = 0; j < row; j++ )
                if ( ptr[ i * ( column + 1 ) + j ] != arr( i, j ) )
                    return false;
        return true;
    }
 
    else
        return false;
}
Вместо строки if ( ptr[ i * ( column + 1 ) + j ] != arr( i, j ) ) как можно сделать что-то вроде if ( this( i, j ) != arr( i, j ) ) ?( такая строка не работает=) )
И еще не очень понятно, почему, например, в функции operator==( Array &arr ) можно свободно обращаться к private элементам объекта arr? (т.е. arr.column и arr.row)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.07.2011, 17:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обращение к объекту с помощью перегруженной операции (C++):

Ошибка компиляции: нет перегруженной бинарной операции +. - C++
Подскажите в чем ошибка. Компилятор говорит что нет перегруженной бинарной операции + для такого типа (41 строка) #include &lt;iostream&gt; ...

Обращение к объекту в условии - C++
Как можно обратиться в данном случае к объекту? Т.к. у меня реверсивная менюшка, то мне нужно чтобы только раз запустить конструктор...

Упаковка пакета с помощью операции сдвига - C++
здравствуйте подскажите пожалуйста, правильно ли написано по этой картинке unsigned_int16 a,b; packet = a &lt;&lt;8; packet = a&lt;&lt;5...

Почему допустимо создавать объект по другому объекту, но нельзя присваивать уже созданный объект, другому созданному объекту? - C++
Это можно : Array a(10); a.set(0,5); Array b(a); А это нельзя : Array a(10); Array b(20); a = b;

Создание перегруженной функции - C++
Создайте перегруженные функции для вычисления абсолютной величины числа. Одна функция работает с числами типа int, другая с типом double....

Сравнение параметров перегруженной ф-ии - C++
Есть два типа параметров у ф-ии (перегрузка) long int и float, нужно их сравнить на &quot;больше-меньше&quot; (не понятно как) и указать на...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
26.07.2011, 17:39 #2
Цитата Сообщение от Seatless Посмотреть сообщение
И еще не очень понятно, почему, например в функции operator==( Array &arr ) можно свободно обращаться к private элементам объекта arr? (т.е. column и row)
метод имеет доступ к закрытым членам даже передаваемых ему объектов как парам.


Цитата Сообщение от Seatless Посмотреть сообщение
как можно сделать что-то вроде if ( this( i, j ) != arr( i, j ) ) ?
может так this->operator()(i,j) ?
1
Seatless
1 / 1 / 0
Регистрация: 19.06.2011
Сообщений: 24
26.07.2011, 17:44  [ТС] #3
Цитата Сообщение от OstapBender Посмотреть сообщение
метод имеет доступ к закрытым членам даже передаваемых ему объектов как парам.



может так this->operator()(i,j) ?
И действительно,спасибо за ответ=) А почему this( i, j ) не работает, а работает только в полной форме, как у Вас, ведь это же равносильно?
0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
26.07.2011, 17:46 #4
потому что this это указатель, можно записать вот так
C++
1
(*this)(i, j)
2
Seatless
1 / 1 / 0
Регистрация: 19.06.2011
Сообщений: 24
26.07.2011, 17:47  [ТС] #5
Цитата Сообщение от Maxwe11 Посмотреть сообщение
потому что this это указатель, можно записать вот так
C++
1
(*this)(i, j)
Все,разобрался. Всем спасибо=)
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2011, 17:47
Привет! Вот еще темы с ответами:

Неоднозначный вызов перегруженной функции - C++
#include &quot;stdafx.h&quot; #include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;Windows.h&gt; #include &lt;iomanip&gt; #include...

Сравнение строк в перегруженной функции - C++
Здравствуйте! есть перегруження функция Block* BlocksList::Find(string text) const { BlockNode * pNode = 0; int...

Неоднозначный вызов перегруженной функции - C++
Ввести с клавиатуры число n. Динамически выделить память для массива целых чисел размером n. Заполнить массив данными с клавиатуры....

Неоднозначый вызов перегруженной функции - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int _tmain(int argc, _TCHAR* argv) { float...


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

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

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