c++ - 用字符串初始化我的类的对象

标签 c++ initialization operator-overloading

我正在写一个多项式类:

#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&)我将提取它的系数和指数。

除了我重载的构造函数和复制构造函数和运算符之外,我应该能够初始化类多项式的对象,例如:
Polynomial p1 = "+5x^2-3";//(in main)
我已经尝试过两次重载我的复制赋值运算符(除了它已经在另一个字符串中的代码中),例如:
polynomial operator=(string)
我失败了。

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

最佳答案

您需要的是 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 * ,并委托(delegate)给 std::string构造函数:
polynomial(char const * c) : polynomial(std::string{c}) {}

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

关于c++ - 用字符串初始化我的类的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61826282/

相关文章:

swift - 为什么 Swift 不允许在 class init 中给 self 赋值,而在 protocol init 中却不允许?

c++ - 'const' 在 operator() 重载中做了什么?

c++ - 简单的 C++ : How to overload the multiplication operator so that float*myClass and myClass*float works

c++ - 数组打印垃圾值

c++ - 无法理解为什么完美转发不起作用

java - 通过声明初始化类 DS 字段 - 在构造函数调用之前还是之后?

c++ - 创建将模板类作为构造函数中的参数的模板类

c++ - 在派生类中重载运算符

c++ - 如何将球面贴图投影到球体/立方体上 : "Equirectangular to cubic"

c++ - 使用 boost::hana 过滤具有类型的列表