内部类
- 定义内部类
把一个类的定义写在另一个类的内部,则称里面的这个类为内部类。例如,Inner就是,
class AAA{
public:
class Inner{
public:
char name[64];
};
};
- 内部类的使用
使用内部类时,类名要使用全称AAA::Inner,例如,
int main(){
AAA::Inner a;
strcpy(a.name,"AnXin")
return 0;
}
除此之外,内部类和普通类没有任何区别。
注意事项:
内部类和外部类互相没有特权,它们没有任何特殊关系,它们不是朋友关系,它们不是父子关系,所以外部类无法自由访问内部类,内部类也无法访问外部类。
- 为什么要使用内部类?
既然内部类和普通类并无区别,那为什么要写在另一个类的内部呢?
(1)避免名字冲突
(2)如果一个类只在模块内部使用,则可以实现类名隐藏。
名字空间
解决名字冲突的终极手段:namespace,名字空间,语法为:
namespace XXX{
//把类和函数写在这个大括号里面
class XXX{
};
} //注意这里不需要分号
使用namespace中的名字,加上一个前缀:
XXX::YYY obj;
XXX::Test();
使用namespace中的名字,解除关键字,using关键字,如果觉得每次加上前缀麻烦,可以使用using关键字来解除前缀。
using namespace XXX; //使用XXX里面的所有名字
using XXX::YYY; //只使用XXX里面的一个名字YYY