1.什么时内部类
内部类也叫嵌套类,就是在类中再定义一个类,这个内部类也相当于时外部类的一个成员
2.内部类与外部类的相互访问
1)内部类不能直接访问外部类的成员
2)内部类可以通过创建一个外部类的对象来访问外部类的成员
#include <iostream>
#include <string>
using namespace std;
class COut
{
public:
int aout;
COut()
{
aout = 12;
}
class CIn
{
public:
int ain;
CIn()
{
ain = 13;
}
void FunIn()
{
COut obOut; //内部类不能直接访问外部类的成员,只能通过在内部类中创建一个外部类的对象,通过对象来访问外部类的成员
cout << "COut: " << obOut.aout << endl;
}
};
void FunOut()
{
CIn obIn1;
cout << "CIn: " << obIn1.ain << endl;
}
CIn obIn; //外部想要访问内部类的成员,也要通过创建一个内部类的对象,通过对象来访问内部类的成员
};
int main()
{
COut ob;
ob.aout = 15;
ob.obIn.FunIn();
ob.FunOut();
system("pause");
return 0;
}
执行结果:
我们通过对象ob将外部类中的成员aout修改成了15,但是通过内部类返回来的结果却还是12,这是为什么呢?这是因为主函数中创建的对象ob和在内部类中创建的对象obOut是两个独自的对象,两者没有任何关联,所以,内部类输出的外部类成员还是自己创建的这个对象的成员,与主函数中的对象对成员的修改无关
为实现这种目的,内部类中就不能创建一个新的对象了,可以通过在内部类中创建一个外部类的指针成员
3)创建一个外部类的的指针成员,构造函数初始化这指针,利用构造函数初始化该指针
#include <iostream>
#include <string>
using namespace std;
class COut
{
public:
int aout;
COut():obIn(this) //通过this指针初始化obIn对象
{
aout = 12;
}
class CIn
{
public:
int ain;
COut *pob; //创建一个外部类的指针成员
CIn(COut *pf):pob(pf) //构造函数初始化该指针
{
ain = 13;
}
void FunIn()
{
//COut obOut; //内部类不能直接访问外部类的成员,只能通过在内部类中创建一个外部类的对象,通过对象来访问外部类的成员
cout << "COut: " << pob->aout << endl;
}
};
CIn obIn; //外部想要访问内部类的成员,也要通过创建一个内部类的对象,通过对象来访问内部类的成员
};
int main()
{
COut ob;
ob.obIn.FunIn();
ob.aout = 15;
ob.obIn.FunIn();
system("pause");
return 0;
}
执行结果: