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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.81
maks_b1
1 / 1 / 0
Регистрация: 26.11.2011
Сообщений: 29
#1

Класс "Матрица": конструктор, деструктор и перегрузка операторов - C++

20.12.2011, 22:02. Просмотров 4191. Ответов 22
Метки нет (Все метки)

Матрица – KMatrix
Методы:
конструкторы, деструктор;
операции: [], =, ==, !=, +, +=, –, –=, *, *=, <<, >>
функции:
Transpose – транспонирование матрицы,
Rows() – количество строк,
Cols() – количество колонок,
Swap() - обменять значения (т.е. матрицы).
Примечание:
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2011, 22:02     Класс "Матрица": конструктор, деструктор и перегрузка операторов
Посмотрите здесь:

Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор C++
C++ Класс "Дата", перегрузка операторов
C++ Класс "Точка", перегрузка операторов
C++ Класс "Дроби" и перегрузка операторов для этого класса
Перегрузка операторов для класса "Матрица" C++
Класс "Матрица". Перегрузка оператора "минус" C++
C++ Класс "динамический массив", перегрузка операторов +, =
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimcoder
Полярный
453 / 426 / 66
Регистрация: 11.09.2011
Сообщений: 1,126
28.12.2011, 21:00     Класс "Матрица": конструктор, деструктор и перегрузка операторов #21
Цитата Сообщение от greeezz Посмотреть сообщение
потому что в функции есть проверка только на размер либо строк либо колонок
Там проверка только строк. Как вы сможите проверить валидность номера колонки?!

Цитата Сообщение от greeezz Посмотреть сообщение
главный минус в том что в том случае когда обращение к элементу корректное ваша функция вернет ошибку.
где-где??? В LiveWorkSpace вернёт 32:
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
using namespace std;
 
class matrix
{
   public:
 
   matrix(int, int, int = 0);
   ~matrix();
 
   float*& operator[](int) const;
 
   void operator*=(matrix& b);
   void operator/=(matrix& b);
 
 
   private:
 
   float **mPtr;
 
   int n;
 
   int m;
};
 
matrix::matrix(int nk, int mk, int init)
{
   //**mPtr = new (float[nk])[mk];
   mPtr = new float*[nk];
   for (int x = 0; x < nk; x++)
      mPtr[x] = new float[6];
 
   n = nk;
 
   m = mk;
 
   for (int i = 0; i < n; i++)
      for (int j = 0; j < n; j++)
    mPtr[i][j] = init;
}
 
matrix::~matrix ()
{
   delete [] mPtr;
}
 
float*& matrix::operator[](int nk) const
{
   if ((nk > n-1) || (nk < 0))
      cout << "Error: array overflow..." << endl;
   return mPtr[nk];
}
 
 
 
 
 
int main ()
{
   
 
   matrix m(10, 2); //NE KVAdratnYA MATRICA!
 
   m[9][1] = 32;
 
   cout << m[9][1] << endl;   //RABOTAET!
 
   return 0;
}

Здесь смысл прост! Выражение
C++
1
m[9][1] = 32;
сначала преобразуется в
C++
1
<какой-то адрес типа float>[32]
Здесь operator[] вызывается ОДИН РАЗ, воспользуйтесь трассировкой, если не верите!
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
28.12.2011, 21:37     Класс "Матрица": конструктор, деструктор и перегрузка операторов #22
dimcoder, я уже разобрался
я сразу не понял что оператор вызывается только один раз. и потом происходт обращение к элементу грубо говоря вектора.

спасибо вам за дебаты! я узнал для себя много интересных вещей!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2011, 09:09     Класс "Матрица": конструктор, деструктор и перегрузка операторов
Еще ссылки по теме:

C++ Класс "Прямая". Перегрузка операторов
Класс "Матрица", перегрузка оператора "+" C++
C++ Создать базовый класс "Массив" и класс-наследник "Матрица"
C++ Определить базовый класс "Матрица" и класс-потомок "Треугольная матрица"
C++ Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this

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

Или воспользуйтесь поиском по форуму:
dimcoder
Полярный
453 / 426 / 66
Регистрация: 11.09.2011
Сообщений: 1,126
29.12.2011, 09:09     Класс "Матрица": конструктор, деструктор и перегрузка операторов #23
Цитата Сообщение от greeezz Посмотреть сообщение
спасибо вам
И вам. С наступающим Новым Годом всех.
Yandex
Объявления
29.12.2011, 09:09     Класс "Матрица": конструктор, деструктор и перегрузка операторов
Ответ Создать тему
Опции темы

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