01/10/2018, 13:37
Code tính giá trị đa thức không thể gọi hàm huỷ
Em có cái chương trình tính giá trị đa thức mà không hiểu sao cứ thêm hàm hủy vào nó lại không tính được.
Mong mọi người chỉ giúp với.
#include <iostream>
#include <math.h>
using namespace std;
class DT {
private:
int bac;
float* hs;
public:
DT() {
bac=1;
hs=new float[1];
}
~DT() {
delete[] hs;
}
void nhap() {
cout<<"Nhap bac: ";
cin>>bac;
if(hs!=NULL) {
delete[] hs;
}
hs=new float[bac+1];
for(int i=0;i<bac+1;i++) {
cout<<"He so thu "<<i<<" la: ";
cin>>hs[i];
}
}
friend ostream& operator<<(ostream& os,DT a) {
for(int i=0;i<a.bac+1;i++) {
os<<a.hs[i]<<" ";
}
return os;
}
float tinh(float x) {
float s=0;
for(int i=0;i<bac+1;i++) {
s+=hs[i]*pow(x,i);
}
return s;
}
};
int main() {
DT x;
float d1,d2;
float S;
x.nhap();
cout<<"He so: "<<x;
cout<<"
So thuc d1: ";
cin>>d1;
cout<<"So thuc d2: ";
cin>>d2;
S=x.tinh(d1)+x.tinh(d2);
cout<<"Gia tri cua S la: "<<S;
return 0;
}
Bài liên quan
Rule of 3 hàm dựng sao chép, hàm gán và hàm hủy.
Ý em là sao em thêm hàm hủy vào thì phương thức tính lại chạy lỗi ấy.
Có thể giải thích thế này: khi gọi cout bạn sẽ có 1 DT a= x. Khi ra khỏi cout a.hs bị huỷ mà nó cũng là cái hệ số của x.hs. Khi đó ra ngoài hàm main x lại gọi hàm huỷ 1 lần để giải phóng x.hs => lỗi. 1 cách khắc phục tạm thời là dùng tham chiếu của DT trong cout. Hoặc tốt hơn nên viết thêm copy constructor DT(DT &)