用字符串初始化我的 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+1
与 cin
对象,然后在 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}) {}
现在您的代码片段应该可以工作了。
我正在写一个多项式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+1
与 cin
对象,然后在 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}) {}
现在您的代码片段应该可以工作了。