Các lớp lưu trữ trong C ++
Một lớp lưu trữ xác định phạm vi (khả năng hiển thị) và thời gian tồn tại của các biến và / hoặc hàm trong Chương trình C ++. Các chỉ định này đứng trước loại mà chúng sửa đổi. Có các lớp lưu trữ sau, có thể được sử dụng trong Chương trình C ++
- auto
- register
- static
- extern
- mutable
Lớp lưu trữ tự động
Các auto lớp lưu trữ là lớp lưu trữ mặc định cho tất cả các biến cục bộ.
{
int mount;
auto int month;
}
Ví dụ trên định nghĩa hai biến có cùng lớp lưu trữ, auto chỉ có thể được sử dụng trong các hàm, tức là các biến cục bộ.
Lớp lưu trữ đăng ký
Các registerlớp lưu trữ được sử dụng để xác định các biến cục bộ cần được lưu trữ trong thanh ghi thay vì RAM. Điều này có nghĩa là biến có kích thước tối đa bằng kích thước thanh ghi (thường là một từ) và không thể áp dụng toán tử '&' một ngôi cho nó (vì nó không có vị trí bộ nhớ).
{
register int miles;
}
Thanh ghi chỉ nên được sử dụng cho các biến yêu cầu truy cập nhanh như bộ đếm. Cũng cần lưu ý rằng việc xác định 'register' không có nghĩa là biến sẽ được lưu trữ trong một thanh ghi. Nó có nghĩa là nó CÓ THỂ được lưu trữ trong một thanh ghi tùy thuộc vào phần cứng và các hạn chế triển khai.
Lớp lưu trữ tĩnh
Các staticlớp lưu trữ hướng dẫn trình biên dịch giữ một biến cục bộ tồn tại trong thời gian tồn tại của chương trình thay vì tạo và hủy nó mỗi khi nó đi vào và đi ra khỏi phạm vi. Do đó, việc làm cho các biến cục bộ trở nên tĩnh cho phép chúng duy trì giá trị giữa các lần gọi hàm.
Công cụ sửa đổi tĩnh cũng có thể được áp dụng cho các biến toàn cục. Khi điều này được thực hiện, nó khiến phạm vi của biến đó bị hạn chế đối với tệp mà nó được khai báo.
Trong C ++, khi static được sử dụng trên một thành viên dữ liệu của lớp, nó khiến chỉ một bản sao của thành viên đó được chia sẻ bởi tất cả các đối tượng của lớp nó.
#include <iostream>
// Function declaration
void func(void);
static int count = 10; /* Global variable */
main() {
while(count--) {
func();
}
return 0;
}
// Function definition
void func( void ) {
static int i = 5; // local static variable
i++;
std::cout << "i is " << i ;
std::cout << " and count is " << count << std::endl;
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
i is 6 and count is 9
i is 7 and count is 8
i is 8 and count is 7
i is 9 and count is 6
i is 10 and count is 5
i is 11 and count is 4
i is 12 and count is 3
i is 13 and count is 2
i is 14 and count is 1
i is 15 and count is 0
Lớp lưu trữ bên ngoài
Các externlớp lưu trữ được sử dụng để cung cấp một tham chiếu của một biến toàn cục hiển thị cho TẤT CẢ các tệp chương trình. Khi bạn sử dụng 'extern', biến không thể được khởi tạo vì tất cả những gì nó làm là trỏ tên biến vào vị trí lưu trữ đã được xác định trước đó.
Khi bạn có nhiều tệp và bạn xác định một biến hoặc hàm toàn cục, biến này cũng sẽ được sử dụng trong các tệp khác, thì extern sẽ được sử dụng trong tệp khác để cung cấp tham chiếu của biến hoặc hàm đã xác định. Chỉ để hiểu extern được sử dụng để khai báo một biến hoặc hàm toàn cục trong một tệp khác.
Công cụ sửa đổi extern thường được sử dụng nhất khi có hai hoặc nhiều tệp chia sẻ cùng các biến hoặc hàm toàn cục như được giải thích bên dưới.
Tệp đầu tiên: main.cpp
#include <iostream>
int count ;
extern void write_extern();
main() {
count = 5;
write_extern();
}
Tệp thứ hai: support.cpp
#include <iostream>
extern int count;
void write_extern(void) {
std::cout << "Count is " << count << std::endl;
}
Ở đây, từ khóa extern đang được sử dụng để khai báo số đếm trong tệp khác. Bây giờ biên dịch hai tệp này như sau:
$g++ main.cpp support.cpp -o write
Điều này sẽ tạo ra write chương trình thực thi, cố gắng thực thi write và kiểm tra kết quả như sau:
$./write
5
Lớp lưu trữ có thể thay đổi
Các mutablespecifier chỉ áp dụng cho các đối tượng lớp, sẽ được thảo luận sau trong hướng dẫn này. Nó cho phép một thành viên của một đối tượng ghi đè hàm thành viên const. Nghĩa là, một thành viên có thể thay đổi có thể được sửa đổi bởi một hàm thành viên const.