cho đoạn mã sau:
lớp đa thức
class CDaThuc
{
private:
int n;//bac da thuc
double *a;//cac he so cua da thuc;
public:
friend ostream& operator<<(ostream &,const CDaThuc &);
friend istream& operator>>(istream &,CDaThuc &);
DT operator+(const DT &d2);
DT operator-(DT d2);
double operator^(const double &x );
};
cho mình hỏi tại sao lại phải có const ở phương thức <<. + mà không có ở>>,-.
và tại sao phải có dâu tham chiếu & ở + - và <<, không có cũng đuọc mà.
làm ơn trả lòi giùm mình
[quote]tại sao lại phải có const ở phương thức <<. + mà không có ở>>,-.[/
quote]
=> tui nghĩ như vầy: bên trong << và + mình sẽ không thay đổi giá trị của tham số => thêm const (để lỡ mình có quên mà thay đổi giá trị của tham số bên trong << và + thì trình biên dịch sẽ "nhắc nhở" mình"); còn bên trong >> thì mình sẽ thay đổi giá trị của tham số => không thể xài const (nếu mình xài thì khi mình thay đổi giá trị của tham số bên trong >> thì trình biên dịch sẽ "nhắc nhở" mình ngay). Đối với -: tui nghĩ nó phải tương tự như + chớ ?
=> có 2 trường hợp (không biết tui còn sót cái nào không) mình muốn xài & ở tham số (còn được gọi là truyền bằng tham chiếu; với C thì mình phải xài con trỏ):tại sao phải có dấu tham chiếu & ở + - và <<, không có cũng đuọc mà
a) mình muốn thay đổi giá trị của tham số bên trong hàm / thủ tục và sự thay đổi này vẫn có hiệu lực khi thoát khỏi hàm. Trường hợp này mình phải truyền bằng địa chỉ (con trỏ hoặc tham chiếu)
b) mình muốn tăng tốc độ truyền tham số: nếu tham số là 1 object lớn thì truyền bằng tham chiếu (chỉ cần copy địa chỉ) sẽ nhanh hơn là truyền bằng giá trị (phải copy nguyên object). Trường hợp này thì tùy chọn (nếu không truyền bằng tham chiếu mà truyền bằng giá trị thì chậm, nhưng không sai). Đặc biệt: kiểu mảng luôn được truyền bằng tham chiếu bởi trình biên dịch (mình không phải lo)
(có gì sai sót mong được góp ý, xin cám ơn)
-thân