2010-11-28 20 views
0

好吧。 。 。指針正在驅動我瘋狂!好吧,現在我已經從我的系統中取出了下面的代碼,但是它並沒有輸出正確的輸出。我究竟做錯了什麼?我的小程序編譯,但它打印出giberish?

#ifndef _TERM_H 
    #define _TERM_H 

    class Term { 

    public: 
    //constructors 
    Term(Rational &a, const int &b) 
    { 
    this->coefficient = a; 
    this->exponent = b; 
    } 

    ~Term() {}  

    //coefficient 

    Rational getCoefficient()const{ 
    return coefficient; 
    } 

    //exponent 

    int getExponent()const{ 
    return exponent; 
    } 

    //print the Term 
    void print()const { 

    cout << &Term::coefficient << " x^" << &Term::exponent << endl; 
    }  

    private: 
    Rational coefficient, a; 
    int exponent, b; 
    }; 

    #endif 

#ifndef _RATIONAL_H 
    #define _RATIONAL_H 

    class Rational { 

    public: 
    //constructors 
    Rational(const int &a, const int &b){ 
    if (a != 0) 
     if (b != 0) 
      this->numerator = a; 
      this->denominator = b; 
    } 

    Rational(){} 

    ~Rational() {} 

     ..... 

    private: 
    int a, b, numerator, denominator; 


    }; 

    #endif 

好了,所以當我的指數我的有理數和我輸入2 I輸入值(2/5)(我應該得到(2/5 X^2) )我得到1 X^1。咦?我頭髮快要拔出來了。 。 。

+0

只是一個(可能)無關的註釋:在`Rational`的構造函數中,你需要圍繞這兩個賦值括號。事實上,第二項任務不在「if」陳述的範圍之內。 – suszterpatt 2010-11-28 13:04:52

+0

由於一些奇怪的原因,我有一種感覺,這是一個學習C++的Python程序員。 – whatnick 2010-11-28 13:08:34

回答

3

爲什麼打印

//print the Term 
    void print()const { 

    cout << &Term::coefficient << " x^" << &Term::exponent << endl; 
    }  

而不是僅僅

void print() const 
{ 
    cout << coefficient << " x^" << exponent << end; 
} 

+0

因爲當我這樣做時,我得到了一百萬個錯誤消息,如: – Mike 2010-11-28 13:10:41

4

在此行中:

cout << &Term::coefficient << " x^" << &Term::exponent << endl; 

你打印出來期限::係數和期限::指數的地址(這是一元&運營商在這方面有什麼)。

嘗試刪除&並重新編譯/運行。

+1

係數(Rational對象)也沒有字符串轉換方法。所以這將是部分垃圾。 – whatnick 2010-11-28 13:07:35

+0

一個問題 - 「Term :: coefficient」(爲什麼不只是`coefficient`?)似乎不被`運算符<<`超載支持。另外,`&Term :: coefficient`可能會得到一個成員指針而不是一個普通的指針(我可能會感到困惑),但是它仍然不能解釋`coef'的值`1',除非我*真的很困惑。是否存在優先問題(在進行流I/O時,習慣性地將大多數表達式包裝在parens中)。 – Steve314 2010-11-28 13:12:55

1

基本的問題是在這裏: &期限::係數< <「X ^」 < < &期限::指數 你需要引用的類項的實例。 Rational對象也需要一個string conversion method

2

有幾件事情,很奇怪我做:

  1. 沒有必要用const引用來傳遞整數。一個int值足夠小,可以被值傳遞而不影響性能。通過const引用傳遞對於大對象很有用。

  2. 正如其他人所說,你正在打印成員變量的地址而不是它們的值。

  3. 你不需要成員變量a和b。

  4. Rational構造函數中的if語句只適用於第一個賦值,而縮進則表明它應該適用於兩者。使用{...}表示多個語句,C++不會在意你的縮進。

  5. 如果Rational構造函數中的賦值未運行,則分子和分母未賦值,並且將具有未定義的值。使用初始化列表來設置默認值。

  6. 您應該考慮爲Term和Rational重載運算符< <而不是編寫打印方法。這也將允許係數按預期工作。

  7. 感謝Steve314指出了這一點:標識符中的前導下劃線是保留的,不應使用,以避免名稱衝突。所以你不應該「#define _TERM_H」。詳情請參閱Steves評論。

相關問題