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

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

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

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

01.12.2011, 15:27. Просмотров 330. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2011, 15:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка оператора () (C++):

Перегрузка оператора + - C++
Помогите с перегрузкой оператора +. Нужно сложить два объекта - двумерные массивы. сArray operator + (сArray &amp;arr) { int size...

перегрузка оператора - C++
Как перегрузить оператор , чтобы его можно было использовать для операций присваивания новых значений определённого члена массива? покажите...

Перегрузка оператора = - C++
Ещё раз всем привет! Недавно разместила у себя &quot;лайт-вершин&quot; своего вектора - int_array. И все дружно начали мне говорить, что у меня...

Перегрузка оператора = - C++
помогите создать перегруженный оператор = в классе Х, который будет копировать содержание строки S1 в S2.

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

Перегрузка оператора < - C++
Здравствуйте. Есть класс треугольник(Triangle), надо перегрузить оператор &lt; для объектов класса Triangle. Написал код, вроде ошибок нет, но...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,370
01.12.2011, 15:35 #2
Реализуй две член-функции:
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 #3
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
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,370
01.12.2011, 16:04 #4
Именно так, только с уточнением: зачем возвращать ссылку на const int ? Не проще ли просто возвратить этот самый int ?
0
Сыроежка
Заблокирован
01.12.2011, 16:08 #5
Цитата Сообщение от CheshireCat Посмотреть сообщение
Именно так, только с уточнением: зачем возвращать ссылку на const int ? Не проще ли просто возвратить этот самый int ?
Вы тем самым позволяете сделать класс шаблонным, где будет достаточно тип int заменить на шаблонный параметр.
0
Sambady
0 / 0 / 0
Регистрация: 01.12.2011
Сообщений: 6
01.12.2011, 16:21  [ТС] #6
спасибо большое
всё работает
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2011, 16:21
Привет! Вот еще темы с ответами:

Перегрузка оператора == - C++
Пытаюсь перегрузить оператор == . Делаю так: В классе: class cData // класс дата { int year; // год short mounth; //...

Перегрузка оператора - C++
Здравствуйте. Нужна помощь) Есть такой класс: class vect { public: float *items; vect() { items = new float; for(int...

Перегрузка оператора [] - C++
подскажите пожалуйста, как реализовать класс, в котором оператор перегружен так, что позволяет записать случайный символ, указанный в...

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


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

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

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