2015-04-27 31 views
-1

我遇到了我認爲是我的程序的插入運算符重載的問題。這是一個初學者C++類的任務,我應該使用後代函數來執行復雜數字和向量的任務。 當我爲任何一個類輸入一個數字時,它或者沒有被正確讀取或者沒有正確地分配給數組。我一直試圖解決這個問題一個多小時,而我嘗試的任何東西似乎都無法正常工作。在後代類C++中istream超載的問題

的類:

class pairs 
{ 
protected: 
    double a; 
    double b; 
public: 
    pairs(): a(0), b(0){} 
    pairs(const pairs&p): a(p.a), b(p.b){} 
    pairs(double x, double y): a(x), b(y){} 
    pairs operator +(pairs& second){ 
     return pairs(a+second.a, b+second.b); 
    } 
    pairs operator -(pairs& second){ 
     return pairs(a-second.a, b-second.b); 
    } 
    bool operator ==(pairs& second){ 
     bool tf=false; 
     if (a==second.a && b==second.b) 
      tf=true; 
     return tf; 
    } 
}; 
class comp:public pairs 
{ 
public: 
    comp():pairs(){} 
    comp(const pairs&p):pairs(p){} 
    comp(double x, double y):pairs(x, y){} 
    comp operator *(comp& second){ 
     comp mew; 
     mew.a=(a*second.a)-(b*second.b); 
     mew.b=(a*second.b)+(b*second.a); 
     return mew; 
    } 
    comp operator /(comp& second); 
    friend ostream& operator << (ostream& fout, comp& num){ 
     if(num.b<0) 
      cout<<num.a<<num.b<<"i"; 
     else 
      cout<<num.a<<"+"<<num.b<<"i"; 
     return fout; 
    } 
    friend istream& operator >> (istream& fin, comp num){ 
     char sym, i; 
     cout<<"Enter a complex number in a+bi or a-bi form: "; 
     cin>>num.a>>sym>>num.b>>i; 
     if(sym=='-') 
      num.b*=-1; 
     return fin; 
    } 
}; 
class vect:public pairs 
{ 
public: 
    vect():pairs(){} 
    vect(const pairs&p):pairs(p){} 
    vect(double x, double y):pairs(x, y){} 
    vect operator*(double num){ 
     return vect(a*num, b*num); 
    } 
    int operator*(vect num){ 
     int j; 
     j=(a*num.a)+(b*num.b); 
     return j; 
    } 
    friend ostream& operator << (ostream& fout, vect& num){ 
     cout<<"<"<<num.a<<","<<num.b<<">"; 
     return fout; 
    } 
    friend istream& operator >> (istream& fin, vect num){ 
     char beak, com; 
     cout<<"Enter vector in <a,b> form: "; 
     cin>>beak>>num.a>>com>>num.b>>beak; 
     return fin; 
    } 
}; 

到插入運營商的電話看起來像:

 comp temp; 
     int store; 
     cin>>temp; 
     cout<<"Where do you want to store this (enter 1-6): "; 
     cin>>store; 
     while(store<1 || store>6) 
     { 
      cout<<"Invalid location. re-enter: "; 
      cin>>store; 
     } 
     six[store-1]=temp; 
     break; 

這對VECT相同的,如果你改變了 'COMP溫度' 到 'VECT臨時' 數組的comp或者vector大小爲6的函數被傳入函數,這就是爲什麼沒有聲明six []的原因。

我試圖運行程序和打印溫度之前,它被分配給數組和兩個值仍然在零,我在爲什麼可能是在一個損失。

任何意見非常感謝。 :]

+0

我可以給出的最佳建議是:在調試器中運行該代碼,並逐行執行,以縮小故障原因。 –

+0

參數應該是'comp#','>>'不需要執行任何用戶交互 - 只能從給定的流中讀取。 – molbdnilo

+0

感謝@molbdnilo問題出在參數!現在完美運作。 :] – abstractbryan

回答

0

您應該使用std::istream&operator>>()實現從閱讀:

friend istream& operator >> (istream& fin, vect num){ 
    char beak, com; 
    // cout<<"Enter vector in <a,b> form: "; 
    fin >> beak >> num.a >> com >>num.b >> beak; 
// ^^^ 
    return fin; 
} 

同爲其他operator>>()重載。

此外,你想輸出使用重載輸入功能之外的提示(這就是爲什麼我上面評論它)。