Lớp lưu trữ trong C ++ và các kiểu của nó là gì?



Trong blog các lớp lưu trữ này, chúng ta sẽ xem xét các lớp lưu trữ khác nhau được sử dụng trong C ++ như auto, register, static, extern và có thể thay đổi với các ví dụ.

Lớp lưu trữ trong C ++ xác định thời gian tồn tại và khả năng hiển thị của biến / hàm. Thời gian tồn tại là khoảng thời gian mà biến vẫn hoạt động và khả năng hiển thị là khả năng truy cập của một biến từ các mô-đun khác nhau của chương trình. Điều này giúp theo dõi sự tồn tại của một biến cụ thể trong thời gian chạy chương trình. Trong blog các lớp lưu trữ này, chúng ta sẽ xem xét các lớp lưu trữ khác nhau được sử dụng trong C ++.

Hãy bắt đầu nào.





Lớp lưu trữ trong C ++ là gì?

Mọi biến trong C ++ đều có kiểu dữ liệu và lớp lưu trữ. Kiểu dữ liệu chỉ định kiểu dữ liệu có thể được lưu trữ trong một biến như int, float, char, v.v. Lớp lưu trữ kiểm soát hai thuộc tính khác nhau của một biến: thời gian tồn tại và phạm vi.

Bạn sẽ thấy mọi biến đều có một kiểu dữ liệu, nhưng bạn có thể chưa thấy bất kỳ lớp lưu trữ nào được gắn vào một biến cho đến nay. Trên thực tế, nếu bạn không xác định một lớp lưu trữ, trình biên dịch sẽ tự động gán một lớp lưu trữ mặc định cho nó. Lớp lưu trữ của biến cung cấp thông tin về vị trí lưu trữ của biến trong bộ nhớ, giá trị ban đầu mặc định, phạm vi của biến và thời gian tồn tại của biến.



Các loại lưu trữ

Có năm lớp lưu trữ trong Chương trình C ++:

  • Tự động
  • Đăng ký
  • tĩnh
  • bên ngoài
  • có thể thay đổi

Hãy thảo luận chi tiết về từng lớp lưu trữ.

Lớp lưu trữ tự động

Lớp lưu trữ tự động (auto) là lớp lưu trữ mặc định cho tất cả các biến cục bộ, được khai báo bên trong một hàm hoặc một khối. Từ khóa auto hiếm khi được sử dụng khi viết Chương trình C ++ .



Phạm vi của các biến tự động nằm trong hàm hoặc khối nơi chúng đã được khai báo & nó không thể được truy cập bên ngoài hàm hoặc khối đó. Nó cũng có thể được truy cập trong các khối lồng nhau trong khối / hàm mẹ mà biến tự động được khai báo.

Bạn có thể truy cập các biến tự động bên ngoài phạm vi của chúng bằng cách sử dụng một biến con trỏ. Bạn cần phải trỏ đến cùng một vị trí bộ nhớ nơi các biến đang cư trú.

Thời gian tồn tại của nó giống như thời gian tồn tại của hàm. Khi quá trình thực thi một hàm kết thúc, biến sẽ bị hủy.

Theo mặc định, giá trị rác được gán cho chúng trong khi khai báo.

Cú pháp:

kiểu dữ liệu var_name1 [= value]

hoặc là

loại dữ liệu tự động var_name1 [= value]

Trong ví dụ trên, hai biến được định nghĩa với cùng một lớp lưu trữ. Tự động chỉ có thể được sử dụng để xác định các biến cục bộ, tức là trong các hàm.

Đăng ký lớp lưu trữ

Như tên cho thấy, lớp lưu trữ thanh ghi được sử dụng để khai báo các biến thanh ghi. Tất cả các chức năng của biến thanh ghi đều giống như biến tự động ngoại trừ việc trình biên dịch cố gắng lưu trữ các biến này trong thanh ghi của bộ vi xử lý nếu có sẵn thanh ghi miễn phí. Nếu không có đăng ký miễn phí, thì chúng chỉ được lưu trữ trong bộ nhớ.

Do đó, các thao tác trên biến thanh ghi nhanh hơn nhiều so với các biến khác được lưu trong bộ nhớ trong thời gian chạy chương trình.

Nói chung, một số biến cần được truy cập thường xuyên trong chương trình được khai báo trong lớp lưu trữ thanh ghi để cải thiện thời gian chạy của chương trình. Không thể lấy địa chỉ của một biến thanh ghi bằng cách sử dụng con trỏ.

Kích thước tối đa của biến bằng kích thước của thanh ghi (nghĩa là khoảng một từ). Nó không thể có toán tử ‘&’ một bậc được áp dụng cho nó vì nó không có vị trí bộ nhớ.

Cú pháp:

đăng ký kiểu dữ liệu var_name1 [= value]

Thí dụ:

c ++ java python
{đăng ký int pi}

Định nghĩa ‘register’ không có nghĩa là biến sẽ được lưu trữ trong một thanh ghi. Nó có thể được lưu trữ trong sổ đăng ký tùy thuộc vào phần cứng và các hạn chế triển khai.

Hãy xem ví dụ về các lớp đăng ký và lưu trữ tự động.

Thí dụ:

#include using namespace std // khai báo biến sẽ được tạo bên ngoài // một giá trị intial cũng có thể được khởi tạo thành x int x void autoStorageClass () {printf ('nDemonstrating auto classnn') // khai báo một biến auto (đơn giản là // viết 'int a = 32' cũng hoạt động) int num = 32 // in biến tự động 'a' printf ('Giá trị của biến' num '' 'được khai báo là auto:% dn', num) printf ( '--------------------------------')} void registerStorageClass () {printf ('nDemonstrating register classnn') / / khai báo biến thanh ghi đăng ký char c = 'G' // in biến thanh ghi 'b' printf ('Giá trị của biến' c '' 'được khai báo là thanh ghi:% dn', c) printf ('---- ---------------------------- ')} int main () {// Để chứng minh lớp lưu trữ tự động autoStorageClass () // Để chứng minh đăng ký Storage Class registerStorageClass () return 0}

Đầu ra:

Đầu ra - Lớp lưu trữ trong C ++ - EdurekaLớp lưu trữ tĩnh

Lớp lưu trữ tĩnh được sử dụng để khai báo biến tĩnh . Các biến tĩnh bảo toàn giá trị của chúng (tức là giá trị cuối cùng) ngay cả khi chúng nằm ngoài phạm vi của chúng. Biến tĩnh chỉ được khởi tạo một lần &tồn tại cho đến khi kết thúc chương trình.

Bộ nhớ chỉ được cấp phát một lần cho biến tĩnh & không có bộ nhớ mới nào được cấp phát vì chúng không được khai báo lại. Biến tĩnh toàn cục có thể được truy cập ở bất kỳ đâu trong chương trình. Theo mặc định, chúng được gán giá trị 0 bởi trình biên dịch.

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ó.

Cú pháp:

kiểu dữ liệu tĩnh var_name1 [= value]

Thí dụ:

#include void function (void) static int c = 5 // Biến tĩnh toàn cục main () {while (c--) {function ()} return 0} void function (void) {static int cnt = 2 cnt ++ std :: cout<< 'cnt is ' << cnt std::cout << ' and c is ' << c << std::endl } 

thiết lập đường dẫn lớp trong java

Đầu ra:

Lớp lưu trữ Extern

Lớp lưu trữ bên ngoài là bắt buộc khi các biến cần được chia sẻ trên nhiều tệp. Các biến Extern có phạm vi toàn cục và các biến này hiển thị bên ngoài tệp mà chúng được khai báo. Biến extern hiển thị cho tất cả các chương trình. Nó được sử dụng nếu hai hoặc nhiều tệp đang chia sẻ cùng một biến hoặc hàm.

Thời gian tồn tại của các biến bên ngoài miễn là chương trình mà nó được khai báo kết thúc. Một biến toàn cục bình thường cũng có thể được tạo ra bên ngoài bằng cách đặt từ khóa ‘extern’ trước phần khai báo / định nghĩa của nó trong bất kỳ hàm / khối nào.

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 đó.

Cú pháp

kiểu dữ liệu bên ngoài var_name1

Thí dụ

#include int cnt extern void write_extern () main () {cnt = 5 write_extern ()}

Tệp thứ hai: support.cpp

#include extern int cnt void write_extern (void) {std :: cout<< 'Count is ' << cnt << std::endl } 

Ở đây, từ khóa extern đang được sử dụng để khai báo cnt trong một tệp khác. Bây giờ biên dịch hai tệp này như sau & trừ

$ g ++ main.cpp support.cpp -o ghi

Điều này sẽ tạo ra chương trình thực thi ghi, hãy thử thực hiện ghi và kiểm tra kết quả như sau & dấu trừ

$. / ghi

5

Tiếp tục với lớp lưu trữ trong C ++, chúng ta hãy xem xét lớp cuối cùng, tức là lớp lưu trữ có thể thay đổi.

Lớp lưu trữ có thể thay đổi

Bộ chỉ định thay đổi chỉ áp dụng cho các đối tượng lớp, 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.

Cuối cùng, hãy xem bảng so sánh để hiểu sự khác biệt giữa các lớp lưu trữ khác nhau.

Lớp lưu trữ

Từ khóa

Cả đời

Hiển thị

Giá trị ban đầu

Tự động

Tự động

Khối chức năng

Địa phương

Rác

Bên ngoài

bên ngoài

Toàn bộ chương trình

Toàn cầu

Số không

Tĩnh

tĩnh

Toàn bộ chương trình

Địa phương

Số không

Đăng ký

Đăng ký

Khối chức năng

Địa phương

Rác

Có thể thay đổi

có thể thay đổi

Lớp học

Địa phương

các ví dụ về chương trình applet java với đầu ra

Rác

Bây giờ sau khi xem qua các chương trình C ++ trên, bạn sẽ hiểu các lớp lưu trữ khác nhau trong C ++ là gì và cách triển khai chúng. Tôi hy vọng blog này là thông tin và giá trị gia tăng cho bạn.

Như vậy chúng ta đã kết thúc bài viết này về 'Các lớp lưu trữ trong C ++'.

Nếu bạn muốn tìm hiểu thêm, hãy xem bởi Edureka, một công ty học trực tuyến đáng tin cậy. Khóa đào tạo và cấp chứng chỉ Java J2EE và SOA của Edureka được thiết kế để đào tạo bạn về cả khái niệm Java cốt lõi và nâng cao cùng với các khung công tác Java khác nhau như Hibernate & Spring.

Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến nó trong phần nhận xét của blog này và chúng tôi sẽ liên hệ lại với bạn trong thời gian sớm nhất.