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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2016, 19:45   #1
isst
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 85
Вопрос Перегрузка оператора в классе

Всем доброго времени суток! Пишу модуль по матрице, у меня так класс TMatrix, и мне нужно перегрузить бинарный оператор + для двух матриц, чтобы если у нас, например, есть матрицы a, b, c, то можно было бы написать c = a + b, и при этом получить в c результат сложения матриц a и b (если их можно сложить). Проблема в том, что я не знаю, как перегружать операторы конкретно в Паскале. Я не прошу "тело" оператора, вы мне только скажите, как в принципе перегружать операторы в Паскале?
Заранее спасибо.
isst вне форума Ответить с цитированием
Старый 27.04.2016, 20:08   #2
TaLadno
Форумчанин
 
Регистрация: 03.06.2015
Сообщений: 393
По умолчанию

Что надо сделать, чтобы забанили в гугле?
"паскаль перегрузка оператора" + google = http://pas1.ru/oop/operator
Вы там держитесь.
TaLadno вне форума Ответить с цитированием
Старый 28.04.2016, 19:45   #3
isst
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 85
Вопрос

Цитата:
Сообщение от TaLadno Посмотреть сообщение
Что надо сделать, чтобы забанили в гугле?
"паскаль перегрузка оператора" + google = http://pas1.ru/oop/operator
Я гуглил, и на этот сайт заглянул в первую очередь, но у меня и PascalABC, и Delphi 10 Seattle отказываются компилировать и выполнять пример, приведенный на этом сайте по матрицам:
Код:
type
  TMatrix = class
    private
        x: array[0..5,0..5] of real;
    public
        constructor Create;
        procedure printer();
        function uniq(): boolean; // является ли матрица единичной
  end;
 
  constructor TMatrix.Create;
    var i,j: integer;
    begin
      for i:=0 to 4 do
        for j:=0 to 4 do
          x[i,j] := Random(10);
      inherited Create;
    end;
 
  function TMatrix.uniq(): boolean;
    var i,j: integer;
    begin
      result := true;
      for i:=0 to 4 do
        for j:=0 to 4 do
          if ((i=j) and (x[i,j]<>1)) or ((i<>j) and (x[i,j]<>0)) then begin
            result := false;
            break;
          end;
    end;
 
  operator +(const a,b: TMatrix)r: TMatrix;
    var i,j: integer;
    begin
      r := TMatrix.Create;
      for i:=0 to 4 do
        for j:=0 to 4 do
          r.x[i,j] := a.x[i,j] + b.x[i,j];
    end;
  operator +(const a: TMatrix; b: real)r: TMatrix;
    var i,j: integer;
    begin
      r := TMatrix.Create;
      for i:=0 to 4 do
        for j:=0 to 4 do
          r.x[i,j] := a.x[i,j] + b;
    end;
  operator *(const a,b: TMatrix)r: TMatrix;
    var i,j: integer;
    begin
      r := TMatrix.Create;
      for i:=0 to 4 do
        for j:=0 to 4 do
          r.x[i,j] := a.x[i,j] * b.x[i,j];
    end;
  operator *(const a: TMatrix; b: real)r: TMatrix;
    var i,j: integer;
    begin
      r := TMatrix.Create;
      for i:=0 to 4 do
        for j:=0 to 4 do
          r.x[i,j] := a.x[i,j] * b;
    end;
 
  procedure TMatrix.printer();
    var i,j: integer;
    begin
      for i:=0 to 4 do begin
        for j:=0 to 4 do
          write(x[i,j]:5:0);
        writeln;
      end;
    end;
 
var
    m1,m2,m3,m4,m5,m6: TMatrix;
begin
  m1 := TMatrix.Create;
  m2 := TMatrix.Create;
  m3 := TMatrix.Create;
  m4 := TMatrix.Create;
  m5 := TMatrix.Create;
  m6 := TMatrix.Create;
  m1.printer; writeln('--------------------------');
  m2.printer; writeln('--------------------------');
  m3 := m1 + m2;
  m3.printer; writeln('--------------------------');
  m4 := m1 * m2;
  m4.printer; writeln('--------------------------');
  m5 := m1 + 10;
  m5.printer; writeln('--------------------------');
  m6 := m2 * 5;
  m6.printer; writeln('--------------------------');
  writeln(m1.uniq());
readln;
end.
PascalABC пишет на 32 строке:
Код:
  Встречено 'operator', а ожидалось begin
Delphi тоже ругается на первый из "перегрузчиков".
Вот с этим я пока не могу разобраться и прошу помочь мне. Может я где-то туплю? Что не так?
isst вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегруз оператора в классе, С++. QT. Вызов перегруженного оператора. Алексей_2012 Помощь студентам 1 14.06.2015 20:44
Перегрузка оператора вывода в классе. cj3678 Помощь студентам 0 19.05.2014 18:48
перегрузка оператора вывода в шаблонном классе Anubys Общие вопросы C/C++ 3 14.03.2012 15:15
Перегрузка оператора в шаблонном классе alex_alpha Общие вопросы C/C++ 0 12.08.2010 21:37