Tôi đang thử nghiệm với C++ để hiểu cách lớp/cấu trúc và đối tượng tương ứng của chúng được đặt trong bộ nhớ và tôi hiểu rằng mỗi trường của một lớp/cấu trúc là một phần bù vào đối tượng tương ứng của chúng.).Các chức năng thành viên được lưu trữ cho một đối tượng ở đâu?
Tôi không hiểu tại sao, ngay cả khi tôi có thể có con trỏ hàm thành viên, các mã sau đây không làm việc:
struct mystruct
{
void function()
{
cout << "hello world";
}
int c;
};
int main()
{
unsigned int offset_from_start_structure = (unsigned int)(&((mystruct*)0)->c);
unsigned int offset_from_start_structure2 = (unsigned int)(&((mystruct*)0)->function); // ERROR - error C2276: '&' : illegal operation on bound member function expression
return 0;
}
Câu hỏi của tôi là: tại sao các dòng
unsigned int offset_from_start_structure = (unsigned int)(&((mystruct*)0)->c);
biên dịch và trả lại cho tôi khoản bù của trường "c" từ đầu cấu trúc và dòng
unsigned int offset_from_start_structure2 = (unsigned int)(&((mystruct*)0)->function);
d thậm chí không biên dịch?
Chức năng thành viên không được lưu trữ trong các đối tượng (tại sao chúng? Chúng giống nhau cho tất cả các đối tượng thuộc loại đó). Và nếu nó giúp (có thể không, có lẽ nó chỉ thêm nhầm lẫn nhưng tôi sẽ cố gắng anyway) con trỏ chức năng thành viên là * không * con trỏ. –
Bạn mong đợi nội dung của hàm _function_ trong bộ nhớ? Các hàm không phải là dữ liệu. Họ là mã. –
"Tôi đang thử nghiệm với C++ để hiểu cách lớp/cấu trúc và các đối tượng tương ứng của chúng được đặt trong bộ nhớ" chi tiết triển khai ", không có gì với ngôn ngữ –