【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;
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值