Theo mình nghĩ, biến không thuộc đối tượng mà thuộc về lớp, còn dữ liệu thuộc về đối tượng. Khi ta gọi phương thức, cái ta thu được là dữ liệu (đối tượng hoặc giá trị) chứ không phải là biến, nên việc biến được khai báo quyền truy cập như thế nào không ảnh hưởng đến getter của biến đó hoạt động như thế nào.
@Duong_Act: Trong Java không có struct. Và method trả về dữ liệu chứ không trả về ref. Chỉ có thể gán dữ liệu vào ref: Ví dụ:
ref = a.x();//Được, vì ref là refernce, còn a.x() là dữ liệu
ref = new B();//Được, vì ref là reference, còn new B() là dữ liệu
a.x() = new B();//Lỗi cú pháp, vì a.x() là dữ liệu nên không thể gán
Nếu anh muốn hàm trả về địa chỉ, anh phải trả về địa chỉ (return &(getData());
) hoặc cái gì đó tương tự, không phải là cú pháp như anh ví dụ ở trên. Vì anh đã sử dụng một con biến trung gian là ret
làm sai lệch kết quả.
Với cả kể cả với việc anh gán ret = a.getData();
anh có chắc chắn là getData()
trả về bản sao của _Data
không, hay chính phép toán =
mới tạo bản sao của a.getData()
? Vì trong Java, các biến primitive thực ra đều được tạo sẵn trên pool của máy ảo, và return chỉ là trỏ đến các đối tượng tạo sẵn đó thôi, liệu C++ có như vậy?