Em có xây dựng 1 class về đa thức bên dưới:
#include<iostream>
using namespace std;
class DT {
private:
int bac;
float* ptr;
public:
DT();
~DT();
friend istream& operator>>(istream& is,DT& u);
friend ostream& operator<<(ostream& os,DT& u);
DT& operator=(DT& u);
DT operator+(DT u);
};
DT::~DT() {
delete[] ptr;
}
DT::DT() {
bac=0;
ptr=new float[bac+1];
for(int i=0;i<bac+1;i++)
ptr[i]=0;
}
istream& operator>>(istream& is,DT& u) {
cout<<"Da thuc bac: ";
is>>u.bac;
u.ptr=new float[u.bac+1];
for(int i=0;i<u.bac+1;i++) {
cout<<"Nhap he so thu "<<i<<": ";
is>>u.ptr[i];
}
return is;
}
ostream& operator<<(ostream& os,DT& u) {
for(int i=0;i<u.bac;i++) {
if(u.ptr[i+1]>=0) os<<u.ptr[i]<<"*x^"<<i<<" + ";
else os<<u.ptr[i]<<"*x^"<<i<<" - ";
}
os<<u.ptr[u.bac]<<"*x^"<<u.bac;
return os;
}
DT& DT::operator=(DT &u) {
bac=u.bac;
ptr=new float[bac+1];
for(int i=0;i<bac+1;i++) {
ptr[i]=u.ptr[i];
}
return u;
}
DT DT::operator+(DT u) {
DT temp;
temp.bac=u.bac>bac?u.bac:bac;
temp.ptr=new float[temp.bac+1];
int min=u.bac<bac?u.bac:bac;
for(int i=0;i<min+1;i++) {
temp.ptr[i]=ptr[i]+u.ptr[i];
}
for(int i=min+1;i<temp.bac+1;i++) {
if(min==bac) {
temp.ptr[i]=u.ptr[i];
}
else temp.ptr[i]=ptr[i];
}
return temp;
}
int main() {
DT u,u1,u2;
cout<<"Nhap 2 da thuc: "<<endl;
cin>>u1>>u2;
cout<<"\nDa thuc 1: \n"<<u1;
cout<<"\nDa thuc 2: \n"<<u2;
u=u1+u2; //loi
cout<<"\nDa thuc tong la: \n"<<u1+u2;
}
Nhưng khi đến hàm main em gán u=u1+u2 thì không gán được mong mọi người chỉ giúp.
Em có thử để hàm operator+ trả về tham chiếu thì chương trình chạy nhưng vì hàm operator+ khi đó tham chiếu đến biến rác nên chương trình bị xung đột vùng nhớ khi chạy và bị dừng khi đang chạy.
DT& DT::operator+(DT u) {
DT temp;
....
return temp;
}
Mọi người cho em hỏi tại sao để tham chiếu nó chạy được còn không thì chương trình báo lỗi luôn.
Có cách nào để hàm trả về tham chiếu 1 biến cục bộ không như ở trên em muốn hàm trả về tham chiếu đến biến temp.