C++学习笔记---内部类与名字空间

内部类的定义: 把一个类的定义写在另一个类的内部,则称里面这个类为内部类。

例如,Inner就是

 class AAA
 {
public:
class Inner
{
public:
char name[64];
}
 }
 在使用该内部类时,类名要使用全程 AAA::inner。除此之外,内部类和普通类没有任何区别。
 内部类和外部类互相没有特权, 他们不是朋友关系,他们不是父子关系,他们没有任何关系。
所以,外部类无法自由访问内部类,内部类也无法自由访问外部类。
如果内部类被 protected/private限制,则该类在外部不可见。(类名被完全隐藏)
 既然内部类和普通类并无区别,那为什么要把它写在另一个类的内部呢?
 原因:
 (1)避免名字冲突
 (2)如果一个类只是在模块内部使用,则可以实现类名隐藏
 当项目越来越大,避免类名的冲突成为一个现实存在的问题。。。将一些只在模块内部使用的类,写成内部类
 注:内部类还可以再定义内部类,没有层数限制,但一般就写两层
 
 名字空间
 解决名字冲突的终极手段:namespae,名字空间
 语法为:
 namespace XXX
 {
//把类名和函数写在这个大括号里面
class YYY
{
};
 }   <-这里不需要分号
 使用namespace中的名字加上一个名字前缀
 XXX::YYY obj;
 XXX::Test();
 解除前缀:using关键字
 如果觉得每次加上前缀麻烦,可以用using关键字来解除前缀。(确定不会产生名字冲突)
 using  namespace XXX; //使用XXX里面的所有名字
 using XXX::YYY; //只使用XXX里面的一个名字YYY
 注:在某些第三方库中是有namespace的,因此我们在使用这些库的时候,要确定要不要用using解除名字前缀。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章