2016-05-01 10 views
0

Ich versuche Operator Overloading in C++ zu lernen.Ich addiere zwei Matrizen mit Operator Overloading Konzept. Ich verwende die Anweisung t3=t1+t2;, um die überladene Methode aufzurufen.Warum gibt der folgende C++ Code diese Ausgabe?

Aber das o/p ist nicht wie erwartet. Die O/P-Matrix kommt heraus wie die zweite Matrix.Ich kann nicht verstehen, warum.

Hier ist der Code.

#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; 
} 

Der 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

Wenn Ihr Compiler * Sie nicht über das 'int a [] [10];' flexible Array-Member gewarnt hat, das in einem C++ - Programm verwendet wird, schlage ich vor, dass Sie die Warnungen Ihres Compilers auffrischen. – WhozCraig

+0

Sie kopieren 'test' Objekte an vielen Stellen ohne Kopieroperatoroperator ... – jpo38

+0

da nur die Spaltenlänge benötigt wird, deshalb gebe ich nur die Spaltenlänge an. – a874

Antwort

2
int a[][10]; 

ist, die nicht eine richtige Array zugewiesen wird. Ich glaube, dass eine Reihe von Größe macht a [1] [10], die Sie später Zugriff außerhalb der Grenzen, wenn Sie sagen

cin>>a[i][j]; 

und

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

mit i > 0;

Sie sollten wahrscheinlich einen std :: vector von std :: vectors verwenden oder Sie müssen anderenfalls dynamischen Speicher zuweisen, indem Sie new/delete verwenden. Sie können ein Array mit dynamischer Größe auf dem Stapel in C++ nicht erstellen.

können Sie sehen hier die Fehler sollten Sie erhalten, wenn Sie die Warnung/Fehlerstufe auf dem Code aufdrehen Sie auf dem Laufenden:

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

Ja, das Problem kam nur wegen Array-Deklaration. Danke – a874

-3

ich auch bin neu in Codierung und nicht sehr vertraut mit C++, aber ich sehe wirklich keine Überlastung des Operators in Ihrem Code. Ich sehe nur zwei Objekte, die dieselben Klassenfunktionen aufrufen. Die Objekte (ich denke) haben die gleichen Werte, also wären die Ausgaben gleich.
Operatorüberladung wäre wie Funktionen (int x) und dann eine weitere Funktion (int x, int y). Verschiedene Argumente, gleicher Funktionsname.

+1

'test operator + (test t2)' ist Operator überladen. Sie sprechen von überladenen Funktionen, nicht von Operatoren. – xaxxon

+0

@rathi bond, Sie werden verwirrt s/w Funktion Überladung und Überlastung des Operators.Dies ist der Fall der Betreiber Überlastung. – a874

Verwandte Themen