Trong đoạn mã, tôi có thể truy cập biến thành viên riêng bên ngoài phạm vi lớp. Mặc dù điều này không bao giờ nên được thực hiện, tại sao nó được phép trong trường hợp này? Có thực tiễn không tốt để nhận biến riêng tư được trả lại bằng tham chiếu không?Tại sao tôi có thể phơi bày các thành viên riêng khi tôi trả lại một tham chiếu từ một hàm thành viên công cộng?
#include <iostream>
#include <cstdlib>
class foo
{
int x;
public:
foo(int a):x(a){}
int methodOne() { return x; }
int& methodTwo() { return x; }
};
int main()
{
foo obj(10);
int& x = obj.methodTwo();
x = 20; // With this statement, modifying the state of obj::x
std::cout << obj.methodOne();
getchar();
return 0;
}
Và liên quan đến phương pháp này, loại trả lại truyền đạt là gì? Và cũng có khi nào tôi nên có loại trả về loại này?
int& methodTwo() { return x; }
PS: Tôi xin lỗi nếu dòng chủ đề là mơ hồ. Ai đó có thể thay đổi nó thành nội dung có liên quan ở đây không. Cảm ơn.
Đối với những người đi qua: [câu hỏi này] (http://stackoverflow.com/questions/8005514/is-returning-references-of-member-variables-bad-pratice) cho thấy có thể nguy hiểm khi trả lại một tham chiếu đến thành viên lớp học. – Arthur
@Arthur: Vâng, như tôi đã nói, nó phụ thuộc vào những gì bạn muốn làm. Nó hoạt động tốt cho 'std :: vector' - nhưng có rất nhiều trường hợp mà nó là điều sai trái để làm quá. –