file1:頭檔案
#ifndef POLYNOMIAL_H_
#define POLYNOMIAL_H_
class Momomial{
public:
int a; //單項式的系數
int n; //x的冪數
long val_m; //該單項式的值
};
class Polynomial{
static int num_p; //定義的多項式的數量
Polynomial(const Polynomial & a,int n);
public:
int x;
Momomial *p; //定義一個momomial物件指標
int num_m; //該多項式的項數
Polynomial(){}
Polynomial(const Polynomial & a); //拷貝建構式(深拷貝)
Polynomial(int n1,int n2); //建構式n1是多項式的項數,n2是x的值
~Polynomial(); //解構式,釋放動態陣列記憶體
void input(); //輸入各個單項式的系數和次(冪)數
void print(); //列印該多項式
static int numnum(){return(num_p++);};//求num(定義的多項式的數量)
long valp(int n); //多項式的值
friend Polynomial operator+(Polynomial & a,Polynomial & b);//多載"+"運算子,實作多項式的相加
Polynomial operator=(const Polynomial & a);
};
#endif
file2:類的實作
#include"polynomial.h"
#include<iostream>
using namespace std;
int Polynomial::num_p=0;
Polynomial::Polynomial(const Polynomial & a){
x=a.x;
num_m=a.num_m;
p=new Momomial[num_m];
for(int i=0;i<num_m;i++){p[i].a=a.p[i].a;p[i].n=a.p[i].n;}
}
Polynomial Polynomial::operator=(const Polynomial & a){
if(this==&a)return *this;
x=a.x;
num_m=a.num_m;
p=new Momomial[num_m];
for(int i=0;i<num_m;i++){
p[i].a=a.p[i].a;
p[i].n=a.p[i].n;
}
return *this;
}
Polynomial::Polynomial(int n1,int n2){
num_p++;
num_m=n1;
p=new Momomial[n1];
x=n2;
}
Polynomial::~Polynomial(){
delete [] p;
}
void Polynomial::input(){
for(int i=0;i<num_m;i++)
cin>>p[i].a>>p[i].n;
}
void Polynomial::print(){
for(int j=0;j<num_m;j++)
cout<<showpos<<p[j].a<<noshowpos<<"x^"<<p[j].n;
cout<<endl;
}
long Polynomial::valp(int n){
long sum=0;
for(int i=0;i<n;i++){
long temp=1;
for(int j=0;j<p[j].n;j++)temp*=x;
p[i].val_m=(p[i].a)*temp;
sum+=p[i].val_m;
}
return sum;
}
Polynomial operator+(Polynomial & a,Polynomial & b){
Momomial *q=new Momomial[a.num_m+b.num_m];
for(int i=0;i<a.num_m+b.num_m;i++){
if(i<a.num_m){
q[i].a=a.p[i].a;
q[i].n=a.p[i].n;
}
else{
q[i].a=b.p[i].a;
q[i].n=b.p[i].n;
}
}
int count=0;
for(int i1=0;i1<a.num_m;i1++){
for(int j1=0;j1<b.num_m;j1++){
if(q[i1].n==q[a.num_m+j1].n){
q[i1].a+=q[a.num_m+j1].a;
q[j1+a.num_m].a=0;
count++;
break;}
}
}
Polynomial c(a.num_m+b.num_m-count,a.x);
int count1=0;
for(int i2=0;i2<a.num_m+b.num_m;i2++){
if((q+i2)->a!=0){
c.p[count1].a=q[i2].a;
c.p[count1].n=q[i2].n;
count1++;}
}
delete [] q;
return c;
}
file3:主函式
#include<iostream>
#include"polynomial.h"
using namespace std;
int main()
{
const int x0=3; //x的值
const int n1=2;
Polynomial cat(n1,x0);
cat.input();
Polynomial dog(n1,x0);
dog.input();
Polynomial dat=dog+cat;
dat.print();
cout<<endl;
return 0;
}
我宣告了兩個類Momomial,Polynomial。其中Polynomial里有一個指向Momomial陣列的指標,然后我想要多載運算子“+”,使兩個Polynomial類相加
現在我可以幾乎可以確定問題出在這個多載“+”函式的定義里
Polynomial operator+(Polynomial & a,Polynomial & b){
Momomial *q=new Momomial[a.num_m+b.num_m];
for(int i=0;i<a.num_m+b.num_m;i++){
if(i<a.num_m){
q[i].a=a.p[i].a;
q[i].n=a.p[i].n;
}
else{
q[i].a=b.p[i].a;
q[i].n=b.p[i].n;
}
}
int count=0;
for(int i1=0;i1<a.num_m;i1++){
for(int j1=0;j1<b.num_m;j1++){
if(q[i1].n==q[a.num_m+j1].n){
q[i1].a+=q[a.num_m+j1].a;
q[j1+a.num_m].a=0;
count++;
break;}
}
}
Polynomial c(a.num_m+b.num_m-count,a.x);
int count1=0;
for(int i2=0;i2<a.num_m+b.num_m;i2++){
if((q+i2)->a!=0){
c.p[count1].a=q[i2].a;
c.p[count1].n=q[i2].n;
count1++;}
}
delete [] q;
return c;
}
下面是我運行程式的截圖
uj5u.com熱心網友回復:
截圖沒傳上來。我在 這發一下
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/60139.html
標籤:基礎類
上一篇:有人用ODAC么?
