我的小程序编译,但它打印出胡言乱语?

时间:2010-11-28 12:57:07

标签: c++

好。 。 。指针让我疯狂!好的,现在我已经从我的系统中得到了这个,下面的代码编译,但是,它没有打印出正确的输出。我做错了什么?

    #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

好的,所以当我为我的Rational数字输入值(2/5)并为我的指数输入2时(我应该得到(2/5 x ^ 2))我得到1 X ^ 1。咦?我的头发用尽了。 。

4 个答案:

答案 0 :(得分:4)

在这一行:

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

您正在打印出Term :: coefficient和Term :: exponent的地址(这是一元&运算符在此上下文中的含义。)

尝试删除&并重新编译/运行。

答案 1 :(得分:3)

为什么打印

//print the Term
   void print()const {

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

而不仅仅是

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

答案 2 :(得分:2)

有几件事我觉得很奇怪:

  1. 不需要通过const引用传递int。 int足够小,可以按值传递而不会影响性能。通过const引用传递对于大对象很有用。

  2. 正如其他人所说,你打印的是成员变量的地址而不是它们的值。

  3. 您不需要成员变量a和b。

  4. Rational构造函数中的if语句仅适用于第一个赋值,而缩进表明它应该适用于两者。对多个语句使用{...},C ++不会关心你的缩进。

  5. 如果Rational构造函数中的赋值未运行,则分子和分母将被取消分配,并且将具有未定义的值。使用初始化列表设置默认值。

  6. 您应该考虑重载运算符&lt;&lt;对于Term和Rational而不是编写print方法。这也将允许cout&lt;&lt;系数按预期工作。

  7. 感谢Steve314指出这一点:标识符中的前导下划线是保留的,不应该使用,以避免名称冲突。所以你不应该“#define _TERM_H”。有关详细信息,请参阅Steves评论。

答案 3 :(得分:1)

基本问题在这里:     &amp; Term :: coefficient&lt;&lt; “x ^”&lt;&lt; &安培;期限::指数 您需要引用类Term的实例。 Rational对象还需要string conversion method