Lớp lưu trữ trong C ++

Một lớp lưu trữ định nghĩa phạm vi (mức hiển thị) và thời gian sống của các biến và / hoặc các hàm trong một Chương trình C ++. Các thông số này trước loại mà chúng sửa đổi. Có các lớp lưu trữ sau đây, có thể được sử dụng trong Chương trình C ++

  • auto
  • register
  • static
  • extern
  • mutable

Lớp lưu trữ auto

Lớp lưu trữ auto 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 với cùng một lớp lưu trữ, tự động 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ữ register

Lớp lưu trữ register đượ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 với kích thước đăng ký (thường là một từ) và không thể có toán tử ‘&’ đơn nhất áp dụng cho nó (vì nó không có vị trí bộ nhớ).

{
   register int  miles;
}
Thanh ghi chỉ đượ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 ‘đăng ký’ không có nghĩa là biến sẽ được lưu trong sổ đăng ký. Nó có nghĩa là nó đượ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ế thực hiện.

Lớp lưu trữ static

Lớp lưu trữ static chỉ thị trình biên dịch để giữ một biến cục bộ tồn tại trong suốt thời gian tồn tại của chương trình thay vì tạo và hủy nó mỗi lần nó đi vào và đi ra khỏi phạm vi. Do đó, làm cho các biến cục bộ tĩnh cho phép chúng duy trì giá trị của chúng giữa các cuộc 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ó làm cho 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 tĩnh được sử dụng trên một thành viên dữ liệu lớp, nó chỉ gây ra 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 của nó.

#include 
 
// 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 mã trên được biên dịch và thực hiện, 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 extern

Lớp lưu trữ bên extern được sử dụng để cung cấp cho một tham chiếu của một biến toàn cầu có thể nhìn thấy tất cả các tệp chương trình. Khi bạn sử dụng ‘extern’, biến này không thể được khởi tạo vì tất cả nó chỉ là tên biến tại vị trí lưu trữ đã được định nghĩa trước đó.

Khi bạn có nhiều tệp và bạn xác định một biến toàn cục hoặc hàm, 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 về biến hoặc hàm được xác định. Chỉ để hiểu externđược sử dụng để khai báo một biến toàn cục hoặc hàm trong một tệp khác.

Trình sửa đổi bên ngoài 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 
int count ;
extern void write_extern();
 
main() {
   count = 5;
   write_extern();
}

Tệp thứ hai: support.cpp

#include 

extern int count;

void write_extern(void) {
   std::cout << "Count is " << count << std::endl;
}
Ở đây, từ khóa bên ngoài đang được sử dụng để khai báo đếm trong một 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 chương trình thực thi ghi , cố gắng thực hiện ghi và kiểm tra kết quả như sau:
$./write
5

Lớp lưu trữ mutable

Trình chỉ định mutable chỉ áp dụng cho các đối tượng lớp, đượ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 đè lên hàm thành viên const. Đó 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.