這是個用動態陣列輸入大小及內容的程式...
但我想對兩陣列作加法運算
雖然compile沒問題...但執行到最後答案就是不出來哩XD
就一直停止不動....麻煩大大幫我解惑一下T___T
#include
using namespace std;
int x=0,y=0;//全域變數
class matrix;
istream& operator>>( istream &is, matrix &m );
ostream& operator<<( ostream& os, const matrix m );
class matrix {
friend istream& operator>>( istream &is, matrix &m );
friend ostream& operator<<( ostream& os, const matrix m );
public:
matrix(){}
// this->~matrix();
matrix operator+(matrix &ml);
matrix operator=(matrix &a);
private: int **mat,y,x;
};
matrix matrix ::operator+(matrix & ml)//這樣應該沒錯吧QQ"
{ int i,j;
matrix ans;
ans.mat=new int * [y];
for(i=0;i
for(j=0;j
}
return ans;
}
istream& operator>>( istream& is, matrix &m )
{
int i,j;
m.mat=new int * [y];
for(i=0;i
m.mat[i]=new int [x];
for(j=0;j
cout<<"num-"<
cin >> m.mat[i][j];
}
}
return is;
}
ostream& operator<<( ostream& os, const matrix m ) {
int i,j;
for(i=0;i
for(j=0;j
os<
}
return os;
}
matrix matrix::operator=( matrix &m ) //跟ans作法依樣
{
int i,j;
matrix mr;
mr.mat=new int * [y];
for(i=0;i
mr.mat[i]=new int [x];
for(j=0;j
mr.mat[i][j] = m.mat[i][j];
}
}
return mr;
}
void main ()
{ cout << "How many rows and cols? ";
cin>>y>>x;
matrix matrix1,matrix2;
cin >> matrix1 ;
cin >> matrix2 ;
matrix matrix_sum;
matrix_sum=matrix1 + matrix2;
cout << matrix_sum;
}
可以的話講一下解構子要如何加上去
才不會出問題
2006-11-26 21:58:10 · 2 個解答 · 發問者 OOXX 2 in 電腦與網際網路 ➔ 程式設計
按照您第三點的方式改了
但結果還是一樣
似乎好像在operator = 和<<的部分值沒有傳入成功
可以幫我檢查一下錯嗎XD...甘溫啦
2006-11-27 19:34:30 · update #1
老實說你給的參考連結程式碼我實在看不太懂
個人也是第一次接觸類別
所以可能會有些疑問請教大大摟...QQ"
2006-11-27 19:38:26 · update #2
宣告在class內時做加法它可以讀到x跟y值....但在做 = 跟<<時卻反而出現亂碼....是不是還要加什麼東西呢QQ?
或者是因為作加法時 return ans; 沒有回傳成功
2006-11-28 05:56:22 · update #3
感謝大大指教..
現在只剩解構子問題了
輸入完數值之後會出問題(出現警告視窗)
我直接照你範例程式寫
matrix::~matrix()
{
delete [] * mat;
delete [] mat;
}
不知哪裡有錯一..一
2006-11-28 20:33:06 · update #4
附上程式碼
class matrix;
istream& operator>>( istream &is, matrix &m );
ostream& operator<<( ostream& os, const matrix m );
class matrix {
friend istream& operator>>( istream &is, matrix &m );
friend ostream& operator<<( ostream& os, const matrix m );
2006-11-28 20:35:41 · update #5
public:
matrix(){}
matrix(int mi, int xx, int yy);
~matrix();
void init(int mi, int xx, int yy);
matrix& operator+(matrix &ml);
matrix& operator-(matrix &ml);
matrix& operator*(matrix &ml);
matrix operator=(matrix m);
private: int **mat, x, y;
};
2006-11-28 20:36:37 · update #6
matrix::~matrix()
{
delete [] * mat;
delete [] mat;
}
2006-11-28 20:39:16 · update #7
matrix &matrix ::operator-(matrix & ml)
{
int i,j;
matrix ans;
ans.mat=new int * [ml.y];
for(i=0;i
ans.mat[i]=new int [ml.x];
for(j=0;j
ans.mat[i][j]=mat[i][j]-ml.mat[i][j];
ans.x=ml.x;
ans.y=ml.y;
}
}
return ans;
}
2006-11-28 20:39:27 · update #8
istream& operator>>( istream& is, matrix &m )
{
int i,j;
cin>>m.x>>m.y;
2006-11-28 20:42:06 · update #9
m.mat=new int * [m.y];
for(i=0;i
m.mat[i]=new int [m.x];
for(j=0;j
cout<<"num-"<
cin >> m.mat[i][j];
}
}
return is;
}
2006-11-28 20:43:02 · update #10
ostream& operator<<( ostream& os, const matrix m ) {
int i,j;
for(i=0;i
for(j=0;j
os<
}
return os;
}
2006-11-28 20:44:25 · update #11
matrix matrix::operator=( matrix m )
{
int i,j;
x=m.x;
y=m.y;
mat=new int * [y];
for(i=0;i
mat[i]=new int [x];
for(j=0;j
mat[i][j] =int (m.mat[i][j]);
}
}
return *this;
}
2006-11-28 20:45:50 · update #12
void main ()
{ cout << "How many rows and cols? ";
matrix matrix1,matrix2;
cin >> matrix1 ;
cin >> matrix2 ;
matrix matrix_sub;
cout << "DEC: "<
cout << matrix_mul<
2006-11-28 20:48:25 · update #13
matrix_mul =matrix1 * matrix2;
2006-11-28
20:49:58 ·
update #14
cout << matrix_mul<
matrix_sub =matrix1 - matrix2;
cout << matrix_sub<
不然必須多宣告一個全域變數
然後解構子涵式如下
不過也因此要宣告全域
有方法不宣告全域嘛
if(des==12)
{
delete [] * mat;
delete [] mat;
}
des++;
2006-11-28 21:16:15 · update #15
你參考我告訴你那篇的解構子的做法。
但你的記憶體不是統一在建構子裡配的,
將來寫大程式時,很容易出問題!!
2006-11-27 06:29:24 補充:
你的 x y 用了全域變數。
這只能用在 n * n 的矩陣!
若只是為了 n*n,那要 x 和 y 2個做啥?
若要有未來的發展性,要把 x, y 寫進 class 裡。
若要符合 OO 的觀點,x, y 要宣告成 class 內的 static 。
加油!! ^_^
2006-11-27 07:38:31 補充:
1. 參考我給您的那2個意見;但不建議使用 static。 因此,您要注意 copy 正確的 __.x 到您要處理的 --.x 和 .y 裡!! 不然,您把 class 裡的 x, y 刪掉!!2. 參考我給您的那篇。3. 您的 operator= 必須用 matrix &matrix::operator=( matrix &m )destructor,如意見,參我給您的那 link
2006-11-28 07:30:14 補充:
matrix &matrix::operator= (matrix &m){ int i,j;this->mat=new int * [y];for(i=0;i
2006-11-28 07:32:15 補充:
其它地方(宣告等)你會改了吧!?
2006-11-28 07:34:09 補充:
對了,我是把你 class 內的 x, y 都刪了。這樣比較簡單。
程式能跑;但我第二個意見裡的問題(將來寫大程式、OO 觀念等),你要自己面對。
2006-11-28 12:02:07 補充:
你的 x, y 一會兒是 global, 一會兒是 in_class!
這就是你會遇到問題的原因!
我自己的期末報告快出不來了!!
你就把 class 內的刪了吧!!!
這樣就出來了!
2006-11-29 05:08:52 補充:
你的解構子應該要這樣寫
matrix::~matrix()
{ int i;
for (i=0; i
}
你的另一個問題出在你的傳回值是函數內變數,在傳回時,已被 free 掉!
2006-11-29 05:24:38 補充:
你的東東實在差太多了,我沒空幫你一個一個改!!!
你要看清楚
A a::opeaator_(A B)
的 A 後面到底是啥都沒,還是有個 & 還是有個 *
你自己把它都對完,還不行,再說,好嗎?
2006-12-02 00:17:07 補充:
沒辦法!
解構子是內定的東東!
因為 compile 譯出來的任何程式程式,經常會用到一些暫存的變數;
而 compile 在譯時,就會在必要的地方把它 free/delete 掉!
當你的〝變數〞是 class 時,它用到的就是解構子!
這是為何它是內定的東東的原因!
只是,有些東東內定沒辦法把它 free 完全!
一定要 programmer 寫清楚到底要怎麼 free。
2006-11-27 02:38:31 · answer #1 · answered by ? 7 · 0⤊ 0⤋
不過解構子有沒有方法讓他一定在我執行到最後才跑其內容呢(在步宣告全域變數下)
2006-12-04 00:33:56 補充:
是喔...看來一定得宣告ㄧ個全域變數了...
總之這段時先謝謝您得關心與指教摟QQ"
2006-12-01 16:56:05 · answer #2 · answered by OOXX 2 · 0⤊ 0⤋