Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2012, 14:16   #1
ol-k_34
Пользователь
 
Регистрация: 08.02.2012
Сообщений: 31
Вопрос ООП

Всем привет уважаемые программисты! У наc в университете началась дисциплина ООП. Т.к. мы бакалавры, объяснение и знакомство с ООП обрезали, и разбирайтесь сами как хотите. Поэтому обращаюсь к вам по небольшому вопросу.
Вот код(два примера), умножение матриц:
Пример 1
Код:
#include <conio.h>
#include <iostream>
using namespace std;
class Matrix
{
private:
        float aMas [3][3];
        float bMas [3][3];
        int chislo;
 
public:
    Matrix(){}
    void Vvod();
    void Vivod();
    void Na_4islo();
    Matrix operator+ (const Matrix&);
    Matrix operator- (const Matrix&);
    Matrix operator* (const Matrix&);
    Matrix operator/ (const Matrix&);
};

Matrix Matrix::operator*(const Matrix &n)
{
    Matrix result(*this);
 
    for (int i = 0; i < 3; i++)
     {
        for (int j = 0; j < 3; j++)
         {
            result.aMas[i][j] *= n.aMas[i][j];
         }
     }
    return result;
Пример 2
Код:
#pragma once
#include <iostream>
using namespace std;

class Matrix

{
protected:
            int _row; // защищенные члены класса Matrix
            int _column;
            double** _matrix;

public:
            Matrix ();
            Matrix(int row, int col); //конструктор
            void AddMatrix(void); // ввод матрицы
            void PrintMatrix(void);// вывод матрицы
            void TransOfMatrix(const Matrix& a );// метод транспонирования матрицы
            void FormOfIdentiti(const Matrix& a);// приведение матрицы к единичному виду
            bool IsSimmetr(const Matrix& a);// проверка матрицы на симметричность
            void MultOfMatrix(const Matrix& a, const Matrix& b, const Matrix& c);//умножение матриц
            Matrix operator+(const Matrix& b);// прегрузка опреатора "+"
            Matrix operator*(const Matrix& b);//прегрузка опреатора "*"
            Matrix operator-(const Matrix& b);//прегрузка опреатора "-"
            bool operator ==(Matrix& b);//прегрузка опреатора "=="
            bool operator !=(Matrix& b);//прегрузка опреатора "!="
			bool VerifyOfData(char *t, int lenght);// метод проверки элементов на форматный ввод
            double* operator[](int r);// прегрузка опреатора "[]";
			//Matrix GetMatrix(const Matrix& a);
};

Matrix Matrix::operator*(const Matrix& b) // перегрузка оператора *
{
	if (this->_column == b._row)
    {
        Matrix matr(this->_row, b._column);

        for (int i = 0; i < this->_row; i++)
        {
            for (int j = 0; j < b._column; j++)
            {
                matr._matrix[i][j] = 0;
                for (int k = 0; k < this->_column; k++)
                {
                    matr._matrix[i][j] += this->_matrix[i][k] * b._matrix[k][j];
                }
            }
        }
        return matr;
    }
	else
	{
		cout << "it's mult isn't correct";
	}
}
Вопрос, не понимаю записи:
Код:
if (this->_column == b._row)
    {
        Matrix matr(this->_row, b._column);
Код:
 matr._matrix[i][j] += this->_matrix[i][k] * b._matrix[k][j];
ну и соответственно так и в первом примере:
Код:
 Matrix result(*this);
Код:
result.aMas[i][j] *= n.aMas[i][j];
как понимаю this->_column это указатель для доступа к членам класса. но b._row, также как и b._matrix[k][j]? не понимаю. const Matrix& b, почему просто b, когда у нас двумерный массив?
не судите строго. т.к. материал изучается поверхностно, и времени мало на углубленное изучение, а требуют с нас как со специалистов, а не бакалавров.
ol-k_34 вне форума Ответить с цитированием
Старый 23.09.2012, 14:55   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
как понимаю this->_column это указатель для доступа к членам класса.
this указатель на себя, т.е. на объект метод которого вызвался.

Цитата:
но b._row, также как и b._matrix[k][j]?
Что не понятного? b параметр, тоже объект... простое обращение к полям.

Цитата:
не понимаю. const Matrix& b, почему просто b, когда у нас двумерный массив?
Где у вас массив? У вас объекты! Вы для них и переопределяете операторы.
p51x вне форума Ответить с цитированием
Старый 23.09.2012, 15:42   #3
ol-k_34
Пользователь
 
Регистрация: 08.02.2012
Сообщений: 31
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение

Где у вас массив? У вас объекты! Вы для них и переопределяете операторы.
спасибо! просто нам толком классы не объясняли. поэтому такие пробелы в знаниях и недопонимания. в объект можно поместить все что угодно, он не зависит от типа?
ol-k_34 вне форума Ответить с цитированием
Старый 23.09.2012, 16:02   #4
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
в объект можно поместить все что угодно, он не зависит от типа?
Совсем каша у Вас в голове. Объект - это экземпляр некоторого класса. Класс - это определяемый программистом тип данных, у которого есть закрытые (доступные только для самого класса и его друзьям), защищенные (доступные наследникам) и открытые (доступные всем) поля (данные), методы (функции для работы с данными) и типы (например, typedef'ы для удобства или другие классы, описанные внутри данного).
Код:
class Class {
private:
  int private_field;
  char private_method (int n); // реализация может быть в другом месте
  typedef float private_typedef;
protected:
  // ...
public:
  // ...
};
Классы могут наследоваться от других классов, в том числе от нескольких сразу. Также для классов можно перегрузить почти все операторы:

Код:
class Array {
  // ...
  int & operator [] (int index);
};

Array a;
a[5] = 90;
Про классы можно говорить еще очень долго, в целом это одна из самых удобных и важных частей этого языка.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 23.09.2012, 16:16   #5
ol-k_34
Пользователь
 
Регистрация: 08.02.2012
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Granus Посмотреть сообщение
Совсем каша у Вас в голове.
Здесь могу согласиться. Просто по материалу как галопам по Европе..3 семестра мы должны закончить за 1 семестр, вот и каша. Просто у меня проблемы что с чем взаимодействует, отсюда трудности..
ol-k_34 вне форума Ответить с цитированием
Старый 23.09.2012, 16:40   #6
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Ну, вроде основы разъяснил, дальше практикуйтесь, читайте и практикуйтесь.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 23.09.2012, 16:43   #7
ol-k_34
Пользователь
 
Регистрация: 08.02.2012
Сообщений: 31
По умолчанию

хорошо, и еще вопрос, как взаимодействуют два класса? например класс Matrix и класс Vector, надо сделать например умножение матрицы на вектор, и вектора на матрицу. это в private отдельно создавать поля? каждое к отдельному классу или как?
ol-k_34 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ооп biowoooooolf Паскаль, Turbo Pascal, PascalABC.NET 0 05.04.2011 10:44
ООП AlekDruzh Паскаль, Turbo Pascal, PascalABC.NET 0 09.09.2009 20:32
Паскаль ООП. Примеры программ с использованием ООП SeЯgey Помощь студентам 5 13.05.2009 21:55
ООП Andrey Gort Общие вопросы Delphi 1 22.11.2006 15:01