С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 01.12.2011
Сообщений: 6

Перегрузка оператора ()

01.12.2011, 15:27. Показов 674. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем
помогите придумать способ реализаци следущей задачи:

есть класс симметричная матрица:

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
class Matrix
{
    public:
        Matrix(unsigned int SizeOfMatrix);
        virtual ~Matrix();
       /.../
        int* operator() (unsigned int i, unsigned int j);
 
    private:
        unsigned int size;
        int **PtrToMatrix;
};
 
Matrix::Matrix(unsigned int SizeOfMatrix)
{
    int i,j;
    size=SizeOfMatrix;
    PtrToMatrix = new int *[size];
    for(i=0;i<size;i++)
    {
        PtrToMatrix[i]=new int[size-i];
        for(j=0;j<(size-i);j++)
        {
            PtrToMatrix[i][j]=size-i-j;
        }
    }
}
 
int Matrix::operator() (unsigned int i, unsigned int j)
{
    if( (i>=size) || (j>=size) ) return NULL;
    if(j<=i) return PtrToMatrix[j][i-j];
    else return PtrToMatrix[i][j-i];
}
требуется реализовать чтобы с элементами матрицы можно было работать только! следущим образом

C++
1
2
3
Matrix a(5);
a(2, 0) = 10;
cout << a(2,5)
вариант

C++
1
2
3
4
5
6
7
int* Matrix::operator() (unsigned int i, unsigned int j)
{
    if( (i>=size) || (j>=size) ) return NULL;
    if(j<=i) return &PtrToMatrix[j][i-j];
    else return &PtrToMatrix[i][j-i];
}
*a(2,0)=10;
не устраивает
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.12.2011, 15:27
Ответы с готовыми решениями:

Перегрузка оператора []
всем доброго времени суток! помогите перегрузить оператор есть у меня класс bd, и массив объектов этого класса table. в классе...

Перегрузка оператора []
Возможно ли создать два перегруженных оператора индексации, чтобы один из них возвращал l-value, другой r-value? В этом примере в обоих...

Перегрузка оператора --
Добрый день, у меня возникла небольшая проблема. Дело в том, что display() работает нормально. Только я не могу понять, что нужно сделать,...

5
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
01.12.2011, 15:35
Реализуй две член-функции:
C++
1
2
int    Matrix::operator() (unsigned int i, unsigned int j) const;
int&   Matrix::operator() (unsigned int i, unsigned int j);
первая - для чтения элемента, вторая - для записи.

PS: чем operator[] не устраивает?
0
Заблокирован
01.12.2011, 15:54
Sambady,

C++
1
2
3
4
5
6
7
8
9
10
11
int & Matrix::operator () ( unsigned int i, unsigned int j ) throw( std::out_of_range )
{
   if ( ! ( i < size  && j < size ) ) throw ( std::out_of_range( "Matrix::operator ()" ) );
   return ( PtrToMatrix[i][j] );
}
 
const int & Matrix::operator () ( unsigned int i, unsigned int j ) const throw( std::out_of_range )
{
   if ( ! ( i < size  && j < size ) ) throw ( std::out_of_range( "Matrix::operator ()" )  );
   return ( PtrToMatrix[i][j] );
}
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
01.12.2011, 16:04
Именно так, только с уточнением: зачем возвращать ссылку на const int ? Не проще ли просто возвратить этот самый int ?
0
Заблокирован
01.12.2011, 16:08
Цитата Сообщение от CheshireCat Посмотреть сообщение
Именно так, только с уточнением: зачем возвращать ссылку на const int ? Не проще ли просто возвратить этот самый int ?
Вы тем самым позволяете сделать класс шаблонным, где будет достаточно тип int заменить на шаблонный параметр.
0
0 / 0 / 0
Регистрация: 01.12.2011
Сообщений: 6
01.12.2011, 16:21  [ТС]
спасибо большое
всё работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.12.2011, 16:21
Помогаю со студенческими работами здесь

Перегрузка оператора <<
Добрый пень! подскажите как написать код для реалилизации следующего требования: SpecialPrint &lt;&lt; &quot;text&quot; &lt;&lt;...

Перегрузка оператора +
Здравствуйте. Пытаюсь перегрузить оператор сложения, но выдаёт ошибку. Задача в том, чтобы сложить два массива из двух разных объектов...

Перегрузка оператора =
Нужно перегрузить оператор так что бы в начале строки и в конце были квадратные скобки . Все почти работает только вот вывод на экран не...

Перегрузка оператора +
Всем добрый вечер. Прошу помочь разобраться. Задание - Для определения даты поставки строительных материалов необходимо перегрузить...

перегрузка оператора +
Не могу понять: в 184 строке отказывается работать. Без нее - все нормально. Скорее всего неправильно переопределил +.... Но если...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru