内部类(嵌套类)

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;
}

执行结果:

猜你喜欢

转载自blog.csdn.net/qq_33757398/article/details/81417470