用字符串初始化我的 class 的对象

Initializing objects of my class with a string

我正在写一个多项式class:

#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&);

};

我收到多项式作为字符串,如下所示: +3x^2-10x+1cin 对象,然后在 istream& operator>>(istream&, polynomial&) 中我将提取它的系数和指数。

除了我重载的构造函数和复制构造函数和运算符之外,我应该能够初始化一个 class 多项式的对象,例如:

Polynomial p1 = "+5x^2-3";//(in main)

我已经尝试重载我的复制赋值运算符两次(此外它已经在代码中另一个用于字符串)如:

polynomial operator=(string)

我失败了。

我真的不知道如何用字符串初始化 class 多项式的对象。有哪些方法可以做到?

您需要的是一个 converting constructor,它接受一个 std::string 类型的参数。

构造函数定义类似于:

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}) {}

现在您的代码片段应该可以工作了。