在 C++ 中,嵌套类是一个类被定义在另一个类的内部的情况。嵌套类可以访问外部类的私有成员,但外部类不能直接访问嵌套类的私有成员。嵌套类有时也称为内部类。
为什么使用嵌套类?
-
封装性:嵌套类可以隐藏在外部类内部,起到封装的作用,只有外部类可以访问嵌套类。
-
组织性:将相关的类放在一起,提高代码的可读性和可维护性。
#include <iostream>
class OuterClass {
private:
int outerPrivate;
public:
class NestedClass {
public:
void display(OuterClass& outer) {
std::cout << "Nested Class accessing Outer Private Member: " << outer.outerPrivate << std::endl;
}
};
OuterClass(int x) : outerPrivate(x) {}
void display() {
std::cout << "Outer Private Member: " << outerPrivate << std::endl;
}
};
int main() {
OuterClass outer(10);
outer.display();
OuterClass::NestedClass nested;
nested.display(outer);
return 0;
}
在这个示例中,NestedClass
是 OuterClass
的嵌套类。NestedClass
可以访问 OuterClass
的私有成员 outerPrivate
。在 main
函数中,首先创建了 OuterClass
的对象 outer
,然后创建了 NestedClass
的对象 nested
,并通过 nested
访问了 outerPrivate
。
在C++中,嵌套类(内部类)的访问权限受到外部类的访问权限控制。具体来说,嵌套类可以访问外部类的所有成员,包括私有成员,但外部类不能直接访问嵌套类的私有成员。
访问权限总结如下:
-
内部类访问外部类:
- 内部类可以访问外部类的所有成员,包括私有成员。
- 内部类可以在其内部直接访问外部类的成员,就像访问自己的成员一样。
-
外部类访问内部类:
- 外部类不能直接访问内部类的私有成员。如果外部类需要访问内部类的私有成员,可以提供公共接口或使用友元关系。
注意事项:
-
作用域:在外部类之外访问嵌套类时,需要使用外部类名作为前缀,如
OuterClass::NestedClass
。 -
访问权限:嵌套类可以访问外部类的私有成员,但外部类不能直接访问嵌套类的私有成员。
-
静态成员:嵌套类可以是静态的,也可以是非静态的。静态嵌套类的对象可以直接通过外部类名访问,如
OuterClass::NestedClass
。
嵌套类是 C++ 中一种强大的特性,能够帮助组织代码结构、提高封装性和可读性。