Phạm vi trong C++
Phạm vi đề cập đến khả năng hiển thị và khả năng truy cập của các biến, hàm, lớp và các mã code định danh khác trong chương trình C++. Nó xác định thời gian tồn tại và phạm vi của các mã code định danh này. Trong C++, có bốn loại phạm vi:
- Phạm vi toàn cục: Các định danh được khai báo bên ngoài bất kỳ hàm hoặc lớp nào đều có phạm vi toàn cục. Chúng có thể được truy cập từ bất kỳ phần nào của chương trình (trừ khi bị ẩn bởi một mã code định danh cục bộ có cùng tên). Thời gian tồn tại của mã code định danh toàn cầu là toàn bộ thời lượng của chương trình.
#include <iostream>
int globalVar; // Đây là biến toàn cục
int main() {
std::cout << "Global variable: " << globalVar << std::endl;
}
- Phạm vi cục bộ: Các định danh được khai báo trong một hàm hoặc một khối có phạm vi cục bộ. Chúng chỉ có thể được truy cập trong hàm hoặc khối mà chúng được khai báo. Thời gian tồn tại của chúng bị giới hạn trong khoảng thời gian thực thi hàm/khối.
#include <iostream>
void localExample() {
int localVar; // Đây là biến cục bộ
localVar = 5;
std::cout << "Local variable: " << localVar << std::endl;
}
int main() {
localExample();
// std::cout << localVar << std::endl; //error: ‘localVar’ was not declared in this scope
}
- Phạm vi không gian tên: Một không gian tên là một phạm vi được đặt tên nhóm các định danh có liên quan lại với nhau. Định danh được khai báo trong một không gian tên có phạm vi không gian tên. Chúng có thể được truy cập bằng cách sử dụng tên không gian tên và toán tử phân giải phạm vi ::.
#include <iostream>
namespace MyNamespace {
int namespaceVar = 42;
}
int main() {
std::cout << "Namespace variable: " << MyNamespace::namespaceVar << std::endl;
}
- Phạm vi lớp: Các định danh được khai báo trong một lớp có phạm vi lớp. Chúng có thể được truy cập bằng cách sử dụng tên lớp và toán tử phân giải phạm vi :: hoặc đối với các thành viên không tĩnh, một đối tượng của lớp và dấu chấm . hoặc mũi tên -> toán tử.
#include <iostream>
class MyClass {
public:
static int staticMember;
int nonStaticMember;
MyClass(int value) : nonStaticMember(value) {}
};
int MyClass::staticMember = 7;
int main() {
MyClass obj(10);
std::cout << "Static member: " << MyClass::staticMember << std::endl;
std::cout << "Non-static member: " << obj.nonStaticMember << std::endl;
}
Hiểu các loại phạm vi khác nhau trong C++ là điều cần thiết để cấu trúc mã code hiệu quả và quản lý tài nguyên trong cơ sở mã code.