클래스 list (list)로부터 상속받은 클래스 폴리곤 (polinom)을 만들어야합니다. 폴리곤 클래스에서 2 개의 객체를 더하거나, 빼거나, 곱하거나, 나눠야합니다. 나는이 코드를 가지고있다. 내 소멸자가 왜 작동하지 않는지 이해할 수 없습니다. 나는 또한 연산자에 과부하가 필요합니다 : +, -, < <, >>하지만 어떻게해야할지 모르겠다.연결된리스트, 다항식, 오버로딩 연산자 << and >> C++
#include <iostream>
#include <conio.h>
using namespace std;
struct nod
{float coef;
int grad;
nod* adr_urm;
};
class lista
{
public:
nod *vf,*sf;
lista();
nod* adaug(nod *&vf,nod*& sf , int gr,float cf);
void afis(nod* vz);
~lista();
};
class polinom : public lista
{public:
polinom();
~polinom();
};
void lista::afis(nod* vz)
{nod *c=vz;
cout<<"Elementele polinomului"<<endl;
int i=0;
while (c)
{if (i) cout<<"+";
cout<<c->coef<<"X^"<<c->grad;
c=c->adr_urm;
i++;
}
cout<<endl<<endl;
}
nod* lista::adaug(nod *&vf,nod*& sf ,int gr,float cf)
{ nod *c=new nod;
c->coef=cf;
c->grad=gr;
c->adr_urm=0;
if (vf==0) vf=sf=c;
else {sf->adr_urm=c;
sf=c;}
return vf;
}
lista::lista()
{vf=0;
}
polinom::polinom()
{vf=0;
}
lista::~lista()
{nod *m=vf, *m1=vf->adr_urm;
while (m1)
{delete m;
m=m1;
m1=m->adr_urm;
}
vf=0;
}
polinom::~polinom()
{nod *man=vf, *man1=vf->adr_urm;
while (man1)
{delete man;
man=man1;
man1=man->adr_urm;
}
vf=NULL;
}
int main()
{
int m,nr,nr1;
float n;
nod* vf=0 ;nod *sf;
nod* varFl=0 ;nod *varFv=0;
polinom l,v;
cout<<"Nr de elemente primul pol nr= ";
cin>>nr;
for (int i=1;i<=nr;i++)
{ cout<<"Elementul "<<i<<endl;
cout<<"Coeficientul = ";
cin>>n;
cout<<"Gradul = ";
cin>>m;
l.adaug(vf,sf,m,n);
varFl=vf;
}
l.afis(varFl);
vf=0;
cout<<"Nr de elemente al doilea pol nr= ";
cin>>nr1;
for (int j=1;j<=nr1;j++)
{cout<<"Elementul "<<j<<endl;
cout<<"Coeficientul = ";
cin>>n;
cout<<"Gradul = ";
cin>>m;
v.adaug(vf,sf,m,n);
varFv=vf;
}
v.afis(varFv);
l.~polinom();
v.~polinom();
_getch();
}
배열 대신 링크 된 목록을 사용해야합니다. 나는 용기를 사용하는 법을 모른다. 나는 상속을 사용해야합니다. –
봉쇄는 연결된 목록 클래스에서 상속하는 것이 아니라 목록 클래스의 구성원으로 연결된 목록을 사용하는 것을 의미합니다. –