Em có một vài câu hỏi mong mọi người giải đáp (bài toán đa thức).
- Có phải
DATHUC u(d);được chạy thì hàm constructor mặc định sẽ được gọi và gán các giá trị khởi tạo cho đối tượng u, sau đó d mới được truyền vào và sau đó hàm copy constructor mới hoạt động? - Sau bước sao chép thành công cho
uthì lại cố tình tạo ra sự thay đổi giá trị các hệ số củadtrong hàm copy constructor. Vậy tại sao khi in ra giá trị củadtrong hàm main thìdvẫn bị thay đổi dù đã dùngconstkhi truyền? Có cách nào khi indmà các hệ số đa thức không bị thay đổi không(vẫn có bước thay đổi hệ số trong hàm copy constructor ).
#include <iostream>
using namespace std;
class DATHUC
{
private:
int n_m;//Bậc của đa thức
int *arr_m;//Mảng chứa hệ số của đa thức
public:
DATHUC();
~DATHUC();
DATHUC(const DATHUC &mang);//Copy constructor
friend ostream& operator<<(ostream& os, const DATHUC &d);
friend istream& operator>>(istream& is, DATHUC &d);
};
DATHUC::DATHUC()
{
this->n_m = 0;
this->arr_m = NULL;
}
DATHUC::~DATHUC()
{
this->n_m = 0;
delete this->arr_m;
}
DATHUC::DATHUC(const DATHUC &mang)
{
n_m = mang.n_m;
arr_m = new int[mang.n_m + 1];
for (int i = 0; i <= n_m; i++)
{
arr_m[i] = mang.arr_m[i];
}
//do có const nên d không bị thay đổi
//nhưng in d ở hàm main vẫn bị thay đổi
for (int i = 0; i <= n_m; i++)
{
mang.arr_m[i] = 0;
}
}
ostream& operator<<(ostream& os, const DATHUC &d)
{
for (int i = 0; i <= d.n_m; i++)
{
os << d.arr_m[i] << " ";
}
return os;
}
istream& operator>>(istream& is, DATHUC &d)
{
if (d.arr_m == NULL)
{
delete d.arr_m;
}
cout << "\nBac cua da thuc: ";
cin >> d.n_m;
d.arr_m = new int[d.n_m + 1];
for (int i = 0; i <= d.n_m; i++)
{
cout << "He so bac " << i << ": ";
is >> d.arr_m[i];
}
return is;
}
int main()
{
DATHUC d;
cin >> d;
DATHUC u(d);
cout << "Phan so d: " << d << endl;
cout << "Phan so u: " << u << endl;
system("pause");
return 0;
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?