01/10/2018, 12:28

Đa năng hóa toán tử

Khi định nghĩa lại phép toán ++ tiền tố

SP& operator ++ (SP &a) {
        a = a + 1;
        return a;
}

còn đây là hậu tố

SP operator ++ (SP &a,int ) {
    SP tmp = a;
    a.T++
    return tmp;
}

Em đang định nghĩa lại cho số phức ,em chưa hiểu lắm về cái dấu & đầu tiên của hàm tiền tố, bác nào giải thích cho em với ạ. Như bình thường thì em biết là: ++ tiền tố trả lại 1 biến và ++ hậu tố thì trả lại giá trị. Nhưng áp dụng vào đây em vẫn thấy mông lung và có một cái gì đấy khó hiểu.
Em cám ơn.

Dark.Hades viết 14:44 ngày 01/10/2018

Dấu & đơn giản là trả lại reference, nói cách khác là địa chỉ của biến
Mặc định thì bạn không cần trả lại reference (ở tiền tố), thay vào đó nó sẽ trả lại giá trị của một biến mới, sẽ được copy khi sử dụng. Việc copy những biến có kiểu dữ liệu nhỏ thì cpu sẽ tính toán rất nhanh (int, float, char,…) tuy nhiên những kiểu dữ liệu lớn như string, struct, class thì trả lại tham chiếu sẽ giúp giảm bớt thời gian cpu copy, thay vào đó nó chỉ cần tính toán địa chỉ.

Ở phần hậu tố trả về giá trị của tmp mà không trả về reference của nó vì biến tmp sẽ bị xoá khi ra khỏi scope, việc cố tình sử dụng địa chỉ của nó sẽ làm chương trình bị crash.

Đơn giản vậy thôi.

Nobita viết 14:36 ngày 01/10/2018

Dấu & đơn giản là trả lại reference, nói cách khác là địa chỉ của biến
Mặc định thì bạn không cần trả lại reference (ở tiền tố), thay vào đó nó sẽ trả lại giá trị của một biến mới, sẽ được copy khi sử dụng. Việc copy những biến có kiểu dữ liệu nhỏ thì cpu sẽ tính toán rất nhanh (int, float, char,…) tuy nhiên những kiểu dữ liệu lớn như string, struct, class thì trả lại tham chiếu sẽ giúp giảm bớt thời gian cpu copy, thay vào đó nó chỉ cần tính toán địa chỉ.

Ở phần hậu tố trả về giá trị của tmp mà không trả về reference của nó vì biến tmp sẽ bị xoá khi ra khỏi scope, việc cố tình sử dụng địa chỉ của nó sẽ làm chương trình bị crash.

Đơn giản vậy thôi.

Em cám ơn ạ…

Bài liên quan
0