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

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

Восстановить пароль Регистрация
 
Garret192
 Аватар для Garret192
1 / 1 / 0
Регистрация: 21.10.2009
Сообщений: 84
09.09.2010, 19:33     Перегрузка операторов #1
Привет всем.Вот и начался новый учебный год,и значит началось програмирование, и значит начались мои проблемы. Первой задачей было составить программу с класами которая находила бы сумму разность и произведение матриц N на M и M на K.Я это сделал.
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include<iostream.h>
#include<stdlib.h>
const int max_n = 50;
const int max_m = 50;
const int max_k= 50;
const int max_x= 50;
const int max_y= 50;
class Matriwa{
    int a,b,c;
    int x[max_n][max_m];
    int y[max_n][max_k];
    int z[max_x][max_y];
public:
  Matriwa(int m, int n, int k);
void show();
void plus();
void minus();
void umnochenie();
 
};
Matriwa::Matriwa(int m, int n,int k){
  a=m;b=n;c=k;
  cout<<"Vvedi elementi pervoi matriw "<<endl;
  for(int i=0;i<a;i++)
  {
      for(int j=0;j<b;j++)
       cin>>x[i][j];
 
  }
  cout<<" A teper vrorai "<<endl;
  for(int i=0;i<b;i++)
  {
      for(int j=0;j<c;j++)
       cin>>y[i][j];
  }
 
}
void Matriwa::show(){
    cout<<"Pervai matriwa "<<endl;
      for(int i=0;i<a;i++)
      {
       for(int j=0;j<b;j++)
       cout<<x[i][j]<<' ';
       cout<<endl;
      }
    cout<<"Vtorai matriwa"<<endl;
     for(int i=0;i<b;i++)
     {
      for(int j=0;j<c;j++)
       cout<<y[i][j]<<' ';
       cout<<endl;
     }
 
}
void Matriwa::plus(){
   cout<<"Matriwa poluchennai putem slojeniy "<<endl;
    for(int i=0;i<a;i++)
      {
       for(int j=0;j<b;j++)
         z[i][j]=x[i][j]+y[i][j];
      }
     for(int i=0;i<b;i++)
     {
      for(int j=0;j<c;j++)
       cout<<z[i][j]<<' ';
       cout<<endl;
     }
 
}
void Matriwa::minus(){
   cout<<"Matriwa poluchennai putem viyichatanie "<<endl;
    for(int i=0;i<a;i++)
      {
       for(int j=0;j<b;j++)
         z[i][j]=x[i][j]-y[i][j];
      }
     for(int i=0;i<b;i++)
     {
      for(int j=0;j<c;j++)
       cout<<z[i][j]<<' ';
       cout<<endl;
     }
}
void Matriwa::umnochenie(){
     cout<<"Matriwa poluchennai putem umnochenie "<<endl;
     for(int i=0;i<a;i++)
       for(int j=0;j<c;j++)
      {
       z[i][j]=0;
       for(int k=0;k<b;k++)
       z[i][j]+=(x[i][k]*y[k][j]);
      }
     for(int i=0;i<b;i++)
     {
      for(int j=0;j<c;j++)
       cout<<z[i][j]<<' ';
       cout<<endl;
     }
 
}
 
int main(){
  int a,b,c;
  cout<<"Vvdi kolichestvo strok"<<endl;
  cin>>a;
  cout<<"Vvdi kolichestvo stolbwov 1 matriwi i kolichestvo strok 2 matriwi "<<endl;
  cin>>b;
  cout<<"Vvdi kolichestvo stolbov vtoroi matriwi "<<endl;
  cin>>c;
  Matriwa ob(a,b,c);
  ob.show();
  if(a!=b && b!=c)
  cout<<"WE CANNOT DO IT "<<endl;
  else
  ob.plus();
  if(a!=b && b!=c)
  cout<<"WE CANNOT DO IT "<<endl;
  else
  ob.minus();
  ob.umnochenie();
  char w; cin>>w;
  return 0;
}
. Но я подумал что не может быть так легко где-то должен быть подвох.
И я был прав. В посдедний день перед сдачей лабы (сегодня) я узнаю что это нужно было сделать используя перегрузку операторов(надо внимательнее слушать препода ) а я вообще не представляю каким образом это можно сделать. Помогите пожалуйста. Если это несложно подправить в программе,ну я если это полностью меняет всю программу дать совет по её реализации.
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2010, 19:33     Перегрузка операторов
Посмотрите здесь:

Перегрузка операторов C++
C++ Перегрузка операторов
Перегрузка операторов С++ C++
C++ перегрузка операторов
Перегрузка операторов C++
Перегрузка операторов с++ C++
Перегрузка операторов C++
Перегрузка операторов C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
10.09.2010, 03:31     Перегрузка операторов #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
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include<iostream>
using namespace std;
 
const int max_n = 50;
const int max_m = 50;
 
class Matrix
{
    int a, b;
    int m[max_n][max_m];
 
public:
    Matrix(int i, int j): a(i), b(j){}
    ~Matrix(){}
    void setIndex();
    Matrix operator +(const Matrix&);
    friend ostream& operator <<(ostream& , const Matrix&);
}; 
 
 
void Matrix::setIndex()
{
    for(int i = 0; i < a; i++)
         for(int j = 0; j < b; j++)
           cin >> m[i][j];
}
 
//               operators
 
ostream& operator <<(ostream& os, const Matrix& matrix)
{
    for(int i=0;i< matrix.a;i++)
    {
        for(int j = 0; j < matrix.b; j++)
            os << matrix.m[i][j] << ' ';
        cout<<endl;
    }
    return os;
}
 
// таким же образом как "+" сделай "-" и "*"
Matrix Matrix::operator +(const Matrix& right)
{     
    Matrix tmp(a, b);
 
    for(int i = 0; i < tmp.a; i++)            
        for(int j = 0; j < tmp.b; j++)
            tmp.m[i][j] = m[i][j] + right.m[i][j];
 
    return tmp;
}
 
//      main
 
int main()
{
  setlocale(LC_ALL,"Rus");
  int a, b;
  cout << "Введи количество строк ";
  cin >> a;
  cout<< "Введи количество столбцов ";
  cin >> b;
 
  cout<<"Введи элементы первой матрицы" << endl;
  Matrix mx1(a, b);
  mx1.setIndex(); // заполнить матрицу
  
  cout<<"Введи элементы второй матрицы" << endl;
  Matrix mx2(a, b);
  mx2.setIndex();
  
 
  // перегрузка  +  оператора
  Matrix mx3 = mx1 + mx2;
 
  // остальные пергрузки сам сделаешь, 
  // тупо копипаст и знаки заменить
  //Matrix mx4 = mx3 - mx2;
  //Matrix mx5 = mx2 * mx2;
 
  system("CLS");
 
 
  // перегрузка  << оператора 
  cout << mx1 << endl; 
  cout << mx2 << endl;
  cout << mx3 << endl;
 
  //system("pause");
 
  return 0;
}
Учти, как я уже сказал , я не решал твою задачу, только слегка изменил код чтоб запустить перегрузку операторов, ну и потренироватся.
Yandex
Объявления
10.09.2010, 03:31     Перегрузка операторов
Ответ Создать тему
Опции темы

Текущее время: 00:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru