我正在写一个多项式类:
#pragma once
#include<iostream>
using namespace std;
class polynomial
{
private:
int coeff[300];
int expo[300];
int counter;
public:
polynomial();
polynomial(const polynomial&);
polynomial operator-()const;
polynomial& operator=(const polynomial);
polynomial operator*(const polynomial)const;
polynomial operator+(const polynomial)const;
polynomial operator-(const polynomial)const;
polynomial operator+(int)const;
friend polynomial operator+(int,const polynomial);
polynomial operator-(int)const;
friend polynomial operator-(int,const polynomial);
polynomial operator*(int)const;
polynomial operator/(polynomial);
friend polynomial operator*(int,const polynomial);
friend ostream& operator<<(ostream&, polynomial&);
friend istream& operator>>(istream&, polynomial&);
};我得到一个字符串形式的多项式:带有cin对象的+3x^2-10x+1,然后在istream& operator>>(istream&, polynomial&)中,我将提取它的系数和指数。
除了我重载的构造函数和复制构造函数和操作符之外,我应该能够初始化一个多项式类的对象,如下所示:
Polynomial p1 = "+5x^2-3";//(in main)
我尝试了两次重载我的复制赋值操作符(除了已经在代码中重载了另一个字符串),如下所示:
polynomial operator=(string)
但我失败了。
我真的不知道,如何用字符串初始化多项式类的对象。有什么方法可以做到这一点?
发布于 2020-05-16 02:48:33
您需要的是一个接受std::string类型的单个参数的converting constructor。
构造函数的定义应该类似于:
polynomial(std::string const &s) {
// use s to construct
}但是,您仍然不能以您想要的方式构造polynomial对象:
polynomial p1 = "+5x^2-3"; 因为编译器需要进行2次隐式转换才能调用适当的构造函数。请注意,您仍然可以执行以下操作:
polynomial p1 {"+5x^2-3"};
// or
polynomial p1 = std::string{"+5x^2-3"}; 要解决此问题,可以添加一个接受char const *并委托给std::string构造函数的构造函数:
polynomial(char const * c) : polynomial(std::string{c}) {}现在你的代码片段应该可以工作了。
https://stackoverflow.com/questions/61826282
复制相似问题