一.内部类
内部类:将一个类的定义写在另一个类的内部,则称里面这个类为内部类。
class AA{
public:
class Inner{
public:
char name[16];
};
};
在使用内部类的时候 AA::Inner
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
class AA{
public:
class Inner{
public:
char name[16];
private:
void Test()
{
}
};
public:
AA()
{
// Inner i;
// i.Test();//错误的,无法访问
}
};
int main()
{
AA::Inner a;
strcpy(a.name,"xiaoming");
printf("name: %s\n",a.name);
return 0;
}
内部类和外部类都无法自由访问对方。
可以把内部的成员函数定义分离到.cpp文件中
class AA::Inner::Test(){}
为啥使用内部类呢?
(1)避免名字冲突,不同类的内部类名字可以一样
(2)如果一个类只在模块内部使用,则可以实现类名隐藏。
内部类里面也可以定义内部类,但我们一般只定义两层。 ‘’
二.名字空间
解决名字冲突的手段:namespace 名字空间
namespace XXX
{
class Object{
public:
int id;
};
void Test()
{
printf("hello world11!\n");
}
} //<-这里不需要分号
使用
XXX::YYY obj;
XXX::Test() ;
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
解决名字冲突的手段:namespace 名字空间
namespace XXX
{
class Object{
public:
int id;
};
void Test()
{
printf("hello world11!\n");
}
} //<-这里不需要分号
使用
XXX::YYY obj;
XXX::Test() ;
namespace YYY
{
void Test()
{
printf("hello world22!\n");
}
}
void Test()
{
printf("helleo world33!\n");
}
int main()
{
XXX::Test();
YYY::Test();
return 0;
}
如果想解除前缀
using namespace XXX;//解除所有
using XXX::YYY //解除一个