函数重载 成员函数和普通函数

img


重载时普通函数和成员函数前缀的规则是啥啊,总是弄不清楚,求解答

这个和前缀没关系
普通函数重载二元运算符,参数是2个,成员函数只要1个参数(因为自身代表一个了)

不知道你这个问题是否已经解决, 如果还没有解决的话:

    使用AddTerms函数,可以根据需要,从输入流in向一个空多项式添加各项,构成一个多项式(注意,为了简化算法,算法中未包含将用户输入多项式按降幂数据存储的代码) 。

    使用Output函数将多项式送输出流,从而输出一个多项式。多项式\[3x^{14}+6x^{2}+2  \]以下列形式输出:3x^14+6x^2+2。

  • AddTerms函数从输入流逐个输入多项式的项(系数c和指数e),以输入负指数作为多项式的结束条件。AddTerms函数调用Term类的成员函数InsertAfter(c , e) 构造一个新项结顶,并将其添加到但虚幻链表尾部。初始时,指针q指向空单循环链表的表头结点,新项结顶将插在q指示的结点之后。InsertAfter函数返回新项结点的地址,该地址值被赋给指针q,因此,指针q始终指向尾结点。
  • Output函数调用在Term类上重载的 “<<” 运算符。如果高次幂是整系数,则按多项式书写的习惯不打印 “ + ” ;否则,对于非高次幂项,当系数为正时,系数前需另加 “ + ” 号。

template< typename T>
void Polynominal<T>::AddTerms(istream& in) {
	Term<T>* q = theList;
	T c;
	int e;
	cout << "输入多项式系数与指数(coef,exp),指数为负数时停止输入\n" << endl;
	for (;;) {
		
		cin >> c >> e;
		if (e < 0)	//如果e为负值,输入完毕
			break;
		q = q->InsertAfter(c, e);
	}
}

template<typename T>
void Polynominal<T>::Output(ostream& out)const {
	bool start = true;
	Term<T>* p = theList->link;
	for (; p != theList; p=p->link) {
		if (!start && p->coef > 0)
			out << '+';
		start = false;
		out << *p;    //调用Term类上重载的 “<<” 运算符
	}
	out << endl;
}

//Term类上重载 “<<” 运算符
template <typename T>
ostream& operator<<(ostream& out, const Term<T>& val) {
	if (val.coef == 0)
		return out;
	switch (val.exp) {
	case 0:
		out << val.coef;
		break;
	case 1:
		if (val.coef != 1)
			out << val.coef;
		out << "X";
		break;
	default:
		if (val.coef != 1)
			out << val.coef;
		out << "X^"<<val.exp;
		break;
	}
	return out;
}


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^