C/C++嵌套类
Posted mick_seu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++嵌套类相关的知识,希望对你有一定的参考价值。
参考自:C++ 与“类”有关的注意事项总结(六):嵌套类与局部类(漫步云端)
类还可以定义在另一个类的内部。我们称之为 “嵌套类”。
嵌套类的目的:因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现,同时对外隐藏该底层实现。
几个注意点:
1、从作用域的角度看,嵌套类被隐藏在外围类之中,该类名只能在外围类中使用。如果在外围类外使用该类名时,需要加外围类名限定。
2、从访问权限的角度来看,嵌套类名与它的外围类的对象成员名遵循相同的访问权限规则。不能访问嵌套类对象中的私有成员函数,也不能在外围类外对外围类的私有部分中的嵌套类建立对象。
3、虽然嵌套类在外围类内部定义,但它是一个独立的类,基本上与外围类不相关。它的成员不属于外围类,同样,外围类的成员也不属于该嵌套类。嵌套类的出现只是告诉外围类有一个这样的类型成员供外围类使用。并且,外围类对嵌套类成员的访问没有任何特权,嵌套类对外围类成员的访问也同样如此。(特殊情况见6)
4、若不在嵌套类内部定义其成员,则其定义只能写到与外围类相同的作用域中,且要用外围类名进行限定,不能把定义写在外围类中。例如,嵌套类的静态成员变量就是这样的一个例子。
5、为了达到隐藏底层的目的,我们可以在源文件中定义该嵌套类,而只在头文件的外围类定义中前置声明这个嵌套类即可。
6、嵌套类可以直接引用外围类的静态成员、类型名和枚举成员(即使是外围类私有的,并且无需使用外围类名限定)。类型名是一个typedef名字、枚举类型名、或是一个类名。
举个例子:
#include <iostream>
class Box
private:
enum Colour
White = 1,
Blue,
Red,
Yellow,
Black,
;
static Colour color_;
class Display
public:
void Show()
Colour col = Black; // Colour是外围类的类型, Black是其枚举成员
std::cout << col << std::endl;
std::cout << color_ << std::endl; // color_是外围类的静态变量
;
public:
Display d_;
;
Box::Colour Box::color_ = White;
int main()
Box b;
b.d_.Show();
return 0;
以上是关于C/C++嵌套类的主要内容,如果未能解决你的问题,请参考以下文章