好。 。 。指针让我疯狂!好的,现在我已经从我的系统中得到了这个,下面的代码编译,但是,它没有打印出正确的输出。我做错了什么?
#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。咦?我的头发用尽了。 。
答案 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)
有几件事我觉得很奇怪:
不需要通过const引用传递int。 int足够小,可以按值传递而不会影响性能。通过const引用传递对于大对象很有用。
正如其他人所说,你打印的是成员变量的地址而不是它们的值。
您不需要成员变量a和b。
Rational构造函数中的if语句仅适用于第一个赋值,而缩进表明它应该适用于两者。对多个语句使用{...},C ++不会关心你的缩进。
如果Rational构造函数中的赋值未运行,则分子和分母将被取消分配,并且将具有未定义的值。使用初始化列表设置默认值。
您应该考虑重载运算符&lt;&lt;对于Term和Rational而不是编写print方法。这也将允许cout&lt;&lt;系数按预期工作。
感谢Steve314指出这一点:标识符中的前导下划线是保留的,不应该使用,以避免名称冲突。所以你不应该“#define _TERM_H”。有关详细信息,请参阅Steves评论。
答案 3 :(得分:1)
基本问题在这里: &amp; Term :: coefficient&lt;&lt; “x ^”&lt;&lt; &安培;期限::指数 您需要引用类Term的实例。 Rational对象还需要string conversion method。