Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Thắc mắc về hàm tạo sao chép trong C++

  1. #1
    Ngày gia nhập
    09 2013
    Nơi ở
    Hồ Chí Minh
    Bài viết
    17

    Mặc định Thắc mắc về hàm tạo sao chép trong C++

    Code:
    #include<iostream>
    #include<conio.h>
    using namespace std;
    
    class DT
    {
    private:
    	int n;
    	double *a;
    public:
    	DT()
    	{
    		this->n=0;
    		this->a=NULL;
    	}
    	DT(int n1)
    	{
    		this->n=n1;
    		this->a=new double[n1+1];
    	}
    	friend ostream& operator<< (ostream& os, const DT &d);
    	friend istream& operator>> (istream& is, DT &d);
    };
    
    istream& operator>> (istream& is, DT &d)
    {
    	if(d.a!=NULL) delete d.a;
    	cout << "\nBac da thuc: ";
    	cin >> d.n;
    	d.a = new double[d.n+1];
    	cout << "Nhap cac he so da thuc: \n";
    	for(int i=0; i<d.n; i++)
    	{
    		cout << "He so bac " << i << "= ";
    		is >> d.a[i];
    	}
    	return is;
    }
    
    ostream& operator<< (ostream& os, const DT &d)
    {
    	os << "\nCac he so: ";
    	for(int i=0; i<d.n; i++)
    		os << d.a[i] << " ";
    	return os;
    }
    
    void main()
    {
    	DT d;
    	cout << "\nNhap da thuc d: "; cin >> d;  //Nhập đa thức lần 1
    	DT u(d);
    	cout << u;
    	cout << d;
    
    	cout << "\n\nNhap da thuc d: "; cin >> d;    //Nhập đa thức lần 2
    	cout << u;
    	cout << d;
    
    	
    	getch();
    }
    Đoạn code trên mình lấy từ sách LTHĐT của thầy Ất. Trong chương trình trên có 2 đoạn nhập đa thức, lần nhập 1 thì in ra được kết quả u và d là như nhau, lần nhập thứ 2 thì nếu nhập cùng bậc đa thức như lần 1 thì u và d như nhau, nếu nhập bậc đa thức khác thì u và d khác nhau( mình thắc mắc đoạn này). Trong sách thầy Ất có viết một đoạn như thế này: "u và d có chung một vùng nhớ chưa hệ số của đa thức, nên khi sửa đổi các hệ số của đa thức trong d thì các hệ số của đa thức trong u cũng thay đổi theo". Mong nhận được sự giúp đỡ từ mọi người.

  2. #2
    Ngày gia nhập
    04 2013
    Nơi ở
    $HOME
    Bài viết
    48

    Theo mình hiểu thì lớp DT sẽ mặc định có copy-constructor. Với copy-constructor mặc định thì khi khai báo DT u(d), u->a và u->d sẽ có cùng giá trị. Với lần nhập thứ nhất, mọi chuyện ok (chú ý là DT u(d) được khai báo sau khi nhập d).

    Khi nhập lại đa thức, vùng nhớ mà d->a trỏ tới sẽ bị hủy, trong khi u->a vẫn trỏ tới đó. Sau đó d->a sẽ trỏ tới vùng nhớ mới. Như thế, việc in ra các số trong d->a thì vẫn ok, nhưng các số trong u->a không còn đúng nữa.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn