C++;:复制构造函数 我的程序在C++中有问题。我尝试编写复制构造函数。在我开始从应用为引用的对象复制数组中的元素之前,一切都很好。 我可以打印应用数组的每个元素,但不能将其复制到复制构造函数将创建的对象中的数组中
下面是代码(我只显示头文件和一些需要复制构造函数的方法,因为我认为所有代码都太长了) 标题.hC++;:复制构造函数 我的程序在C++中有问题。我尝试编写复制构造函数。在我开始从应用为引用的对象复制数组中的元素之前,一切都很好。 我可以打印应用数组的每个元素,但不能将其复制到复制构造函数将创建的对象中的数组中,c++,copy-constructor,C++,Copy Constructor,下面是代码(我只显示头文件和一些需要复制构造函数的方法,因为我认为所有代码都太长了) 标题.h #pragma once # include <iostream> # include <fstream> # include <cmath> using namespace std; class Polynomial { private: int degree; double* coefficients; public:
#pragma once
# include <iostream>
# include <fstream>
# include <cmath>
using namespace std;
class Polynomial {
private:
int degree;
double* coefficients;
public:
static const string errors[5];
Polynomial(const Polynomial& wzor); // konstruktor kopiujacy
Polynomial(float n);
~Polynomial();
void setCoefficient(unsigned int i, double value);
double getCoefficient(unsigned int i);
double value(double x);
friend ostream & operator <<(ostream & out, Polynomial & p);
double operator[](const int index);
double operator()(double x);
void operator=(Polynomial &obiekt);
friend Polynomial operator+(Polynomial &obiekt,Polynomial &obiekt1);
friend Polynomial operator-(Polynomial &obiekt,Polynomial &obiekt1);
friend Polynomial operator~(Polynomial &obiekt);
friend Polynomial operator*(Polynomial &obiekt,Polynomial &obiekt1);
friend Polynomial operator*(Polynomial &obiekt,double x);
};
Polynomial::Polynomial(float n) {
if(n<0){
throw 0;
}
else if(floor(n)-n != 0){
throw 2;
}
degree=(int)n;
coefficients=new double [(int)n+1];
for(unsigned int i=0; i<n; i++) {
coefficients[i]=0.0;
}
coefficients[(int)n]=1.0;
}
Polynomial::Polynomial(const Polynomial &wzor){
degree=wzor.degree; // it's allright
for(int i=0; i<=wzor.degree; i++){
coefficients[i]=wzor.coefficients[i]; // compilator says that this line is wrong
}
}
Polynomial::~Polynomial(){
delete coefficients;
}
Polynomial operator+(Polynomial &obiekt,Polynomial &obiekt1){
Polynomial nowy(1);
if(obiekt1.degree > obiekt.degree){
nowy=obiekt1;
for(int i=0; i<=obiekt.degree; i++){
nowy.coefficients[i]=nowy.coefficients[i]+obiekt.coefficients[i];
}
}
else{
nowy=obiekt;
for(int i=0; i<=obiekt1.degree; i++){
nowy.coefficients[i]=nowy.coefficients[i]+obiekt1.coefficients[i];
}
}
return nowy;
}
#pragma一次
#包括
#包括
#包括
使用名称空间std;
类多项式{
私人:
智力度;
双*系数;
公众:
静态常量字符串错误[5];
多项式(const多项式&wzor);//konstruktor kopiujacy
多项式(浮点n);
~多项式();
无效设置系数(无符号整数i,双精度值);
双系数(无符号整数i);
双值(双x);
friend ostream&运营商
您已将系数声明为指向double的指针,而不是数组
for(int i = 0; i <= wzor.degree; i++) {
coefficients[i] = wzor.coefficients[i]; // Error! No memory allocated.
}
对于存储数组索引的变量,应该使用typestd::size\t
,而不是int
最后,我建议使用标准库中的容器,而不是内置数组,例如std::vector
您已将系数声明为指向double
的指针,而不是数组
for(int i = 0; i <= wzor.degree; i++) {
coefficients[i] = wzor.coefficients[i]; // Error! No memory allocated.
}
对于存储数组索引的变量,应该使用typestd::size\t
,而不是int
最后,我建议使用标准库中的容器而不是内置数组,例如std::vector
您的赋值运算符是错误的。它应该是
Polynomial & operator=(const Polynomial &obiekt);
你的赋值运算符错了,应该是
Polynomial & operator=(const Polynomial &obiekt);
#包括
std::向量系数;
您可以使用向量的副本,这意味着您不必自己实现它。
你不必做删除的事情
使用resize&[]或push_back方法处理字符串。您的度数将是coverties.size()。\include
std::向量系数;
您可以使用向量的副本,这意味着您不必自己实现它。
你不必做删除的事情
使用resize&[]或push_back方法处理字符串。您的度数将是coverties.size().警告标志:您的类中有一个double*
,但在副本构造函数中没有任何东西在该double*
后面分配新的存储。您为什么不在这里使用vector
呢?警告标志2:您对系数使用new[]
,但没有将其与delete[]匹配
警告标志:您的类中有一个double*
,但是在副本构造函数中没有任何东西在该double*
后面分配新的存储。您为什么不在这里使用vector
呢?警告标志2:您对系数使用new[]
,但没有将其与delete[]匹配
你是对的,这是一个问题。还有一个问题。为什么赋值运算符应该声明为:多项式&运算符=(const多项式&obiekt);我想赋值,所以我想更改正在使用的对象,我不想得到作为参数应用的对象副本的新对象。@user3061714polyman&operator=(const polyman&obiekt)
的定义应该返回对分配给的对象的引用(例如{degree=obiekt.degree;return*this;}
),而不是参数的副本(声明为返回引用)。这是声明复制赋值运算符的常用方法,因为它允许表达式,如if((x=y)){}
和x=y=z
(运算符链接)。有关更多信息,请参见此:您是对的,这是一个问题。还有一个问题。为什么赋值运算符应声明为:多项式&运算符=(const多项式&obiekt);我想赋值,所以我想更改正在使用的对象,我不想得到作为参数应用的对象副本的新对象。@user3061714polyman&operator=(const polyman&obiekt)
的定义应该返回对分配给的对象的引用(例如{degree=obiekt.degree;return*this;}
),而不是参数的副本(声明为返回引用)。这是声明复制赋值运算符的常用方法,因为它允许使用诸如if((x=y)){}
和x=y=z
(运算符链接)之类的表达式。有关更多信息,请参见此:
Polynomial & operator=(const Polynomial &obiekt);
#include <vector>
std::vector<double> coefficients;