内部类是什么
内部类是C++的一种嵌套类。是一种在类声明里面定义的一种局部数据类型
内部类的作用
虽然内部类在外部类中定义,但是两者没有什么关系,个人感觉内部类的作用更多是为了代码的组织与管理:
- 内部类根据其对应的public或private属性,可以控制是否可以在外部定义变量。
- 当外部类的成员变量不是类型名称、静态或枚举数时 内部类无法直接使用该成员变量。
- 实现内部类与外部类更为通用的方式是通过添加成员指针和声明友元函数,甚至可以访问到private数据。
代码示例
/* * 1. 当外部类的成员变量不是类型名称、静态或枚举数时 内部类无法直接使用该成员变量
* 2. 可以把外部类起到内部类的作用空间的限制作用
*
*/
template<typename T>
class Outer{
public:
Outer(){cout<<"address of Outer: "<<this<<endl;}
class Inner{
public:
Inner(){cout<<"address of Inner: " <<this<<endl;}
T set_val_Outer(T val)
{
Outer<T>* Outer_addr = (Outer<T>*)((char*)this-offsetof(Outer<T>, in));//offsetof定义在cstddef中
Outer_addr->val_Outer = val;
return Outer_addr->val_Outer;
}
T val_Inner;
} in;//此处在外部类内部定义了内部类的实例,所以在构造整外部类的时候,会先调用内部类的构造函数,若这里没有in则不会调用内部>类的构造函数。
T val_Outer;
};
int main()
{
Outer<int> outer;
Outer<int>::Inner inner;
outer.val_Outer=3;
inner.val_Inner=4;
cout<<outer.val_Outer<<","<<inner.val_Inner<<endl;
outer.in.set_val_Outer(12);
cout<<"Outer val after reset:"<<outer.val_Outer<<endl;
return 0;
}
与java内部类的对比
以后学了java再补上!!!