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;
}
rogp10 viết 15:42 ngày 01/10/2018

Rule of 3 hàm dựng sao chép, hàm gán và hàm hủy.

Black viết 15:40 ngày 01/10/2018

Ý 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.

Gió viết 15:38 ngày 01/10/2018

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 &)

Bài liên quan
0