2016-05-01 16 views
0

私はOperator OverloadingをC++で学ぼうとしています。Operator Overloadingという概念を使って2つの行列を追加しています。 オーバーロードされたメソッドを呼び出すために、t3=t1+t2;というステートメントを使用しています。次のC++コードではなぜこの出力が得られますか?

しかし、o/pは期待通りではありません。o/p行列は2番目の行列と同じです。理由を理解できません。

ここにコードがあります。

#include<iostream> 
using namespace std; 
int m,n; 
class test 
{ 
int a[][10]; 
public: 

void get() 
{ 
    cout<<"enter matrix elements"<<endl; 
    for(int i=0;i<m;i++) 
    { 
     for(int j=0;j<n;j++) 
     { 
      cin>>a[i][j]; 
     } 
    } 
} 
void print() 
{ 
    cout<<"matrix is as follows "<<endl; 
    for(int i=0;i<m;i++) 
    { 
     for(int j=0;j<n;j++) 
     { 
      cout<<a[i][j]<<"\t"; 
     } 
     cout<<endl; 
    } 
} 

test operator + (test t2) 
{ 
    test temp; 
    for(int i=0;i<m;i++) 
    { 
     for(int j=0;j<n;j++) 
    { 
     temp.a[i][j]=a[i][j]+t2.a[i][j]; 
    } 
    } 
    return temp; 
} 
}; 
int main() 
{ 
    cout<<"enter value of m and n"<<endl; 
    cin>>m; 
    cin>>n; 
    test t1; 
    t1.get(); 
    test t2; 
    t2.get(); 
    t1.print(); 
    t2.print(); 

    test t3; 
    t3=t1+t2; 
    t3.print(); 
    return 0; 
} 

O/Pは---適切な配列を割り当てていない

G:\>a.exe 
enter value of m and n 
2 
2 
enter matrix elements 
1 
1 
1 
1 
enter matrix elements 
2 
2 
2 
2 
matrix is as follows 
2  2 
2  2 
matrix is as follows 
2  2 
2  2 
third matrix is as follows 
2  2 
2  2 
+4

C++プログラムで使用されている 'int a [] [10];'というフレキシブルな配列メンバーについて警告していない*場合は、コンパイラの警告を出すことをお勧めします。 – WhozCraig

+0

コピーコンストラクタ演算子なしで 'test'オブジェクトを多くの場所にコピーしています... – jpo38

+0

は、カラムの長さだけが必要なので、カラムの長さだけを指定しています。 – a874

答えて

2
int a[][10]; 

あります。私はそれがサイズの配列あなたは

cin>>a[i][j]; 

i > 0

cout<<a[i][j]<<"\t"; 

を言う境界のうち[1] [10]、あなたの後からアクセスすると信じて。

おそらく、std :: vectorのstd :: vectorを使うべきでしょう。さもなければ、新しい/ deleteを使って自分で動的メモリを割り当てる必要があります。 C++では、スタック上に動的にサイズの配列を作成することはできません。私もコーディングに新しく、非常に精通していないです

http://melpon.org/wandbox/permlink/AByJI3YnPijl6WYM

prog.cc:6:5: error: flexible array member 'a' in otherwise empty class is a GNU extension [-Werror,-Wgnu-empty-struct] 
int a[][10]; 
    ^
prog.cc:6:5: error: flexible array members are a C99 feature [-Werror,-Wc99-extensions] 
2 errors generated. 
+0

はい、配列宣言のみで問題が発生しました。ありがとう – a874

-3

あなたは、あなたが投稿コードに警告/エラーレベルを上げたときに取得する必要があり、ここでエラーを見ることができますC++では、コード内で演算子のオーバーロードが発生することはありません。私はちょうど同じクラスの関数を呼び出す2つのオブジェクトを参照してください。オブジェクト(私は思う)は同じ値を持つので、出力は同じになります。
演算子のオーバーロードは関数(int x)のようになり、次に別の 関数(int x、int y)となります。異なる引数、同じ関数名。

+1

'test operator +(test t2)'は演算子のオーバーロードです。あなたは演算子ではなく、オーバーロードされた関数について話しています。 – xaxxon

+0

@ rathi bond、私は混乱したb/w関数のオーバーロードと演算子のオーバーロードを混乱させています。これは演算子のオーバーロードのケースです。 – a874

関連する問題