что/кто правильнее BCB vs VC
P.S.
VC с настройками по умолчанию от ANSI-стандарта далек... мама не горюй, и позволяет выделывать курбеты, от которых любой другой компилятор сойдет с ума (ИМХО не есть гут)
это называется сцепленные операции, реализацию перегрузки в студию
Да-да, показывай как перегружал. Я точно знаю, что как раз матрицы и как раз BCB перемножал у меня в любом количестве (ABCD-метод расчета резонаторов :)).
А что, гуи-приложение нормально глотает конструкцию?
Да-да, показывай как перегружал. Я точно знаю, что как раз матрицы и как раз BCB перемножал у меня в любом количестве (ABCD-метод расчета резонаторов :)).
А что, гуи-приложение нормально глотает конструкцию?
Пожалуйста:
private:
int w, h;
double **d;
void destroy();
void create(int H, int W);
public:
matrix(int H = 0, int W = 0);
matrix(matrix& A);
~matrix();
matrix operator=(matrix a);
friend ostream& operator<<(ostream& os, matrix& m);
friend istream& operator>>(istream& is, matrix& m);
friend matrix operator*(matrix& a, matrix& b);
friend matrix operator+(matrix& a, matrix& b);
friend matrix operator-(matrix& a, matrix& b);
};
Ну примерно так. Единственный нюанс в том, что при реализации используется рекурсия. В моем случае этого не избежать, т.к. это самая суть метода. Сам код достаточно громоздкий, т.ч. вышлю по первому требованию
Пожалуйста:
private:
int w, h;
double **d;
void destroy();
void create(int H, int W);
public:
matrix(int H = 0, int W = 0);
matrix(matrix& A);
~matrix();
matrix operator=(matrix a);
friend ostream& operator<<(ostream& os, matrix& m);
friend istream& operator>>(istream& is, matrix& m);
friend matrix operator*(matrix& a, matrix& b);
friend matrix operator+(matrix& a, matrix& b);
friend matrix operator-(matrix& a, matrix& b);
};
Ну примерно так. Единственный нюанс в том, что при реализации используется рекурсия. В моем случае этого не избежать, т.к. это самая суть метода. Сам код достаточно громоздкий, т.ч. вышлю по первому требованию
Это не реализация и ничего не дает, и еще, зачем friend перед operator+-*?
тк с перегрузкой все ОК.
Иногда помогает изменение последовательности объявлений:
friend matrix operator+(matrix& a, matrix& b);
friend matrix operator-(matrix& a, matrix& b);
friend matrix operator*(matrix& a, matrix& b);
honeybeer
Если не friend, то операции не симметричны
honeybeer
Если не friend, то операции не симметричны
Это верно.
Но по поводу ошибки bilderа - не факт. Не вижу реализации
Это верно.
Но по поводу ошибки bilderа - не факт. Не вижу реализации
Если оператор объявлен корректно и соответствующая функция также корректна с точки зрения языка,
то вне зависимости от реализации компилятор не должен выдавать ошибку.
Если оператор объявлен корректно и соответствующая функция также корректна с точки зрения языка,
то вне зависимости от реализации компилятор не должен выдавать ошибку.
Вроде разобрался. Если перегруженную функцию объявить членом класса, то все работает. И если разобраться, то это правильно. Ведь если дружественную функцию объявить например так:
Как тогда компиллятор должен реагировать на строку вида:
Вроде разобрался. Если перегруженную функцию объявить членом класса, то все работает. И если разобраться, то это правильно. Ведь если дружественную функцию объявить например так:
Как тогда компиллятор должен реагировать на строку вида:
Вот сейчас точно разобрался. Паруметры в функцию перегрузки передаются не по ссылке, а по значению, т.е.
все работает. Значит насчет предыдущего ответа ошибся. Странно...