2011-10-05 36 views
5

Như tôi đã hiểu, mỗi cá thể của một lớp có các biến thành viên riêng trong bộ nhớ, để nó có thể lưu trữ các giá trị khác nhau cho các đối tượng khác nhau. Tuy nhiên, nó không giống với chức năng của thành viên. Các hàm thành viên được tái sử dụng trên các đối tượng của một lớp, vì vậy nó chỉ có một địa chỉ với một khối bộ nhớ để tham chiếu khi cần thiết cho tất cả các đối tượng.Sự khác biệt giữa phương pháp tĩnh và hàm tĩnh trong bộ nhớ

Chức năng tĩnh được thực hiện để truy cập các thành viên tĩnh. Tuy nhiên, hàm tĩnh cũng chỉ tồn tại một trong suốt thời gian tồn tại của ứng dụng của nó. Ngoài việc là accessor tĩnh, ở mức độ thấp nó không phải là khác nhau với các chức năng lớp bình thường, phải không? Hoặc có lẽ tôi sai, rằng mỗi lớp đều có những chức năng riêng của nó?

Trả lời

2

Điều này khác ngôn ngữ với ngôn ngữ, nhưng trong các hàm C hoặc C++ 03 thường ánh xạ trên các hàm lắp ráp; đó là chúng tồn tại một lần trong bộ nhớ (cho dù các hàm miễn phí, hàm lớp hay hàm tĩnh lớp) và lấy đối số làm tham số, bao gồm con trỏ this cho hàm thành viên ẩn.

Trong C++ 11, hàm lambda giới thiệu tính mới: mỗi trường hợp của hàm được gọi là sẽ mang một số trạng thái. Từ một quan điểm thực hiện, nó có nghĩa là cần có một hàm "thông thường" và nó được liên kết với một bó dữ liệu ẩn danh (nếu cần). Hàm này không cần phải trùng lặp mỗi khi lambda được tạo ra, nhưng dữ liệu thì không. Một con số hữu ích là hãy nhớ rằng lambdas (trong C++) thay thế các đối tượng hàm (hoặc các đối tượng vị ngữ): chúng chỉ là đường cú pháp, việc thực hiện tương tự.

6

Chức năng không tĩnh chấp nhận tham số bổ sung, this, là con trỏ tới cá thể lớp với các biến thể hiện cụ thể.

Các hàm tĩnh không có tham số này (do đó bạn không thể sử dụng this trong một hàm tĩnh và chỉ có thể truy cập các thành viên dữ liệu tĩnh).

0

Sự khác biệt duy nhất giữa các hàm tĩnh và thành viên là các hàm thành viên luôn có con trỏ this được truyền tự động.

0

chỉ đơn giản nếu được giới thiệu, các hàm tĩnh sẽ tạo một bộ nhớ duy nhất cho chính nó và có nghĩa là cho các thành viên dữ liệu tĩnh thường không thể thay đổi. Nhưng các hàm không tĩnh tạo ra các bộ nhớ riêng biệt cho từng trường hợp và có nghĩa là cho cả các thành viên dữ liệu tĩnh và tĩnh. Nếu u yêu cầu đầu ra ổn định đi cho tĩnh và nếu u yêu cầu thay thế đi cho không tĩnh.

Các vấn đề liên quan