在 C++ 中,类作用域是指类定义中声明的成员(包括成员变量和成员函数)所具有的可见性和访问范围。类作用域有几个关键的特性:
- 成员变量和成员函数的访问控制:在类作用域内,可以定义 public(公有),private(私有)和 protected(保护)成员。公有成员可以在类的外部访问,私有成员只能在类的内部访问,而保护成员可以在类的内部以及派生类中访问。
- 名称遮蔽:在类作用域内,成员变量和成员函数的名称会遮蔽外部的同名变量和函数。这意味着在类的成员函数内部,当你引用一个名称时,编译器会首先在类作用域内查找该名称。
- 作用域解析运算符:作用域解析运算符
::
可以用来访问类作用域外的全局作用域或者其他类的作用域中的成员。例如,如果有两个同名的全局变量和类成员变量,可以在类内部使用::
来明确指明访问全局变量。 - 构造函数和析构函数:构造函数和析构函数是在类作用域内定义的特殊成员函数,它们用于对象的创建和销毁。构造函数在对象创建时自动调用,而析构函数在对象销毁时自动调用。
- 成员函数的定义:成员函数可以在类定义内部或外部定义。如果在类定义内部定义,它们会自动被视为内联函数。如果在外部定义,需要使用作用域解析运算符来指定函数属于哪个类。
- 静态成员:类作用域内可以声明静态成员变量和静态成员函数。静态成员属于类本身,而不是类的某个具体对象,因此它们可以通过类名直接访问,不需要创建对象实例。
下面是一个简单的例子,展示了类作用域的一些特性:
#include <iostream>
class MyClass {
public:
int publicVar; // 公有成员变量
void publicFunc(); // 公有成员函数声明
private:
int privateVar; // 私有成员变量
void privateFunc(); // 私有成员函数声明
protected:
int protectedVar; // 保护成员变量
void protectedFunc(); // 保护成员函数声明
};
// 成员函数的定义
void MyClass::publicFunc() {
publicVar = 10;
privateVar = 20; // 可以访问私有成员
protectedVar = 30; // 可以访问保护成员
}
void MyClass::privateFunc() {
// 私有函数的实现
}
int main() {
MyClass obj;
obj.publicVar = 5; // 正确,可以访问公有成员
// obj.privateVar = 5; // 错误,不能访问私有成员
// obj.protectedVar = 5; // 错误,不能访问保护成员
obj.publicFunc(); // 正确,可以调用公有成员函数
// obj.privateFunc(); // 错误,不能调用私有成员函数
// obj.protectedFunc(); // 错误,不能调用保护成员函数
return 0;
}
在这个例子中,MyClass
有公有、私有和保护成员。在 main
函数中,我们创建了 MyClass
的一个对象 obj
并尝试访问其成员。可以看到,我们只能访问公有成员 publicVar
和调用公有成员函数 publicFunc
。尝试访问私有或保护成员会导致编译错误。