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.

Kiểu Modifier trong C++

C ++ cho phép các kiểu dữ liệu char, int và double có các modifier trước chúng. Công cụ sửa đổi được sử dụng để thay đổi ý nghĩa của loại cơ sở sao cho phù hợp hơn với nhu cầu của các tình huống khác nhau.

Các công cụ sửa đổi kiểu dữ liệu được liệt kê ở đây –

    • signed
    • unsigned
    • long
    • short

Các modifier được signed, unsigned, long và short có thể được áp dụng cho các kiểu cơ số nguyên. Ngoài ra, signed và unsigned có thể được áp dụng cho char, và long có thể được áp dụng để tăng gấp đôi.Các modifier được signed và unsigned cũng có thể được sử dụng làm tiền tố cho các modifier short hoặc long . Ví dụ: unsigned long int .

C ++ cho phép ký hiệu viết tắt để khai báo các số nguyên unsigned, short hoặc long . Bạn chỉ có thể sử dụng từ unsigned, short, hoặc long, mà không có int . Nó tự động ngụ ý int . Ví dụ, hai câu lệnh sau đây đều khai báo các biến số nguyên không dấu.

unsigned x;
unsigned int y;
Để hiểu sự khác biệt giữa cách thức các biến số nguyên được ký và unsigned nguyên được giải thích bởi C ++, bạn nên chạy chương trình ngắn sau đây –
#include 
using namespace std;
 
/* This program shows the difference between
   * signed and unsigned integers.
*/
int main() {
   short int i;           // a signed short integer
   short unsigned int j;  // an unsigned short integer

   j = 50000;

   i = j;
   cout << i << " " << j;

   return 0;
}
Khi chương trình này được chạy, sau đây là đầu ra –
-15536 50000
Kết quả trên là vì mẫu bit đại diện cho 50.000 như một số nguyên không dấu ngắn được hiểu là -15,536 bởi một đoạn ngắn.

Loại vòng loại trong C ++

Các loại vòng loại cung cấp thêm thông tin về các biến mà chúng đứng trước.

Sr.No Vòng loại & Ý nghĩa
1 const

Đối tượng của loại const không thể được thay đổi bởi chương trình của bạn trong quá trình thực thi.

2 volatile

Công cụ sửa đổi volatile nói với trình biên dịch rằng giá trị của biến có thể được thay đổi theo các cách không được chương trình xác định rõ ràng.

3 restrict

Một con trỏ đủ điều kiện theo restrict ban đầu là phương tiện duy nhất mà đối tượng nó trỏ đến có thể được truy cập. Chỉ C99 mới thêm một loại vòng loại mới được gọi là giới hạn.