2CirciterДа судя по всему Blitz++ шикарная библиотека, но у меня лабораторная сформулирована так : никаких сторонних модулей, кроме стандартной библиотеки
Так, ну этот хитрый механиз с промежуточным класом(Row) я уже реализовал, но не всё так харашо как хотелось бы,
собственно operator[][] работает на ура, а вот при попытке прицепить к строкам арифметические операции наблюдаю очень упорное противостояние, причом настолько упорное что даже немогу понять чтоже ему не нравиться(строчку с ошибкой я нашол, а вот причину так и непонял), наверно буду использовать для получения юзабельных строк чтото вроде метода
(именно его я имел ввиду когда говорил о функциональном подходе).
P.S.Если хтото обяснит почемуже арифметки со строками в данном случае невозможна через клас Row(или обяснит как ее таки сделать) это будет весьма познавательно. (для меня так точно)
Для тех кому интересно:
1) исходний код
2) под арифметикой строк я имею ввиду виражение:
Код:
Matrix a(/*size =*/ 3);
cin>>a;
a[0] = a[1] + a[2];
ошибка вилетает в операторе =
_______________________________
Написав пост выше я думал что у меня ничего не работает, но внезапно закоментировал две строчки и всё заработало правильно, что меня повергло в шок, ведь я даже могу обяснить почему оно не должно работать так как работает. И кстати говоря я даже нашол случай когда оно не работает, но опятьже обяснить немогу.
______
закоментировал я строчки тут:
Код:
Row& Row::operator =(const Row & a)
{
if( this == &a) return *this;
//delete[] m;
// m = new Frac[a.s];
s = a.s;
for(int i=0;i<s;i++)
{
m[i] = a.m[i];
}
return *this;
}
и теперь по идее я несмогу дублировать данные, и скопированные обэкты будут указывать в одно и тоже место. Но при этом если я пишу
Код:
Matrix a,b;
cout<<"Enter Matrix 3*3"<<endl;
cin>>a;
cout<<a;
b[0] = a[0];
a[0] = a[1]+ a[0];
cout<<"a ="<<a<<endl;
cout<<b;
а сделать этот код неработающим можно просто написав так:
Код:
Matrix a,b,c;//все матрици по умолчанию 3*3, с изначально нулевыми елементами(мне так удобней)
cout<<"Enter Matrix 3*3"<<endl;
cin>>a;
cout<<a;
b =c;
b[0] = a[0];
a[0] = a[1]+ a[0];
cout<<"a ="<<a<<endl;
cout<<b;
P.P.S. собственно исходний код всего этого чудища:
http://dl.dropbox.com/u/2375611/Matrix.rar-- Вс ноя 29, 2009 23:27:27 --Можно как [R][C], так и (R, C) сделать, кстати! Чтобы на любой вкус!
А можна пример как это сделать, ато я вот тут уже третье колесо к велосипеду изобретаю.