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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Метод Гаусса http://www.cyberforum.ru/cpp-beginners/thread164657.html
Добрый вечер, можете написать программу для решения СЛАУ методом гаусса на Си, чтобы был прямой и обратный ход.
C++ Открытие файла по нажатию на клавишу Подскажите пожалуйста как сделать чтобы при нажатии "H" мне открывался текстовый фаил с спавкой об игре??? http://www.cyberforum.ru/cpp-beginners/thread164655.html
C++ Написать функцию, которая сравнивает целых числа и возвращает результат сравнения в виде одного из знаков: <, > или =.
Написать функцию, которая сравнивает целых числа и возвращает результат сравнения в виде одного из знаков: <, > или =. Написати функцію, яка порівнює цілих числа і повертає результат порівняння в вигляді одного з знаків: <, > або =. Оффициальным языком форума является русский язык. В дальнейшем темы с заданиями на языке отличном от русского будут удаляться.
Как из массива брать случайный его элемент? C++
как из массива брать случайный его элемент???
C++ Поиск среднего арифметического массива http://www.cyberforum.ru/cpp-beginners/thread164637.html
Дано массив чисел,написать програму какая находит среднее арифметическое число.
C++ Вычислить значение выражения при различных вещественных типах данных Вычислить значение выражения при различных вещественных типах данных (float и double). Вычисления следует выполнять с использованием промежуточных переменных. ((a-b)^3-a^3)/(b^3-3*a*b^2-3*a^2*b) при а=1000, b=0.0001 1) n++*m 2) n++<m 3) m-- >m подробнее

Показать сообщение отдельно
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
10.09.2010, 03:31     Перегрузка операторов
В рамках подготовки к экзамену решил потренироватся и заодно возможно тебе помогу, у меня как раз с операторами не очень.

Учти, то что ты там считаешь полный бред - матрицы так не складываются/умножаются.
Кроме того, так у как тебя получаются две разные по размеру матрицы, иногда получается что ты прибавляешь несуществующий индекс. Поэтому я сделал чтоб обе матрицы были одинакового размера - математическую часть оставим на твоей совести. Также старался ничего не менять в коде, только вынужденные изменения чтоб прога вообще скомпилировалась.

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;
}
Учти, как я уже сказал , я не решал твою задачу, только слегка изменил код чтоб запустить перегрузку операторов, ну и потренироватся.
 
Текущее время: 00:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru