30/09/2018, 17:28
Dấu & ở khai báo hàm có mục đích gì?
CHocsinh& CHocsinh::operator = (const CHocsinh &x)
Em đang học OOP và không hiểu các dấu & ở hàm trên có mục đích gì mong mấy anh chị giúp em giải thích ? ( em nghĩ nó là tham chiều nhưng cảm thấy kì kì nên em mạn phép lên đây hỏi )
Bài liên quan
đúng là tham chiếu rồi, kì ở chỗ nào?
viết là
const CHocsinh &x
hayconst CHocsinh& x
đều như nhau. Còn vì sao truyền tham chiếu thì nếu ko truyền tham chiếu thì nó tạo 1 bản copy rồi mới truyền bản copy này vào, cái này chắc thừa biết là ko cần thiết rồi.còn cái này sao anh nhỉ mặc dù trong hàm chả cần gì đến địa chỉ
VD thế này
Rõ ràng em thấy tmp không hề là địa chỉ mà Fraction vẫn ok . em nghĩ phải thế này
return &tmp
return &tmp
là return con trỏ rồi.Fraction<T>&
là reference. Reference khác với con trỏ. Reference là trả về đích xác/chính chủ biến/giá trị nào đó. Ở đâyoperator+
thì ko trả về reference được, vìtmp
là biến tạm thời, nếu trả về đúngtmp
thì sau khi kết thúc hàmoperator+
thìtmp
sẽ bị xóa, object trả về cũng mất luôn. Bắt buộc trả về bản copy củatmp
. Sửa lại giá trị trả về làFraction<T>
hoặc kỹ hơn làconst Fraction<T>
. Tuy nói là bản copy nhưng trình biên dịch sẽ tối ưu hóa code dùm mình trả về đúngtmp
luôn, ko phải trả về bản copy củatmp
.còn với
operator+=
thì mới phải trả về reference. Reference ở đây chính là object trong vế trái củaoperator+=
. Vd gọia += b += c
thì+=
được đánh giá từ phải sang trái: tínhb += c
trước, trả về đích thịb
, sau đó đánh giáa += b
(b
lúc này đã được công thêmc
), rồi trả về đích thịa
.có
operator+=
rồi thì viếtoperator+
dễ: