C++中,private, public的使用

在了解了类的相关知识后,我们就可以开始学习将成员属性进行私有化,用来使得数据只读或者只写。而设置成员属性私有化的好处有两点

1.在实际开发过程中,我们会将成员属性设置为私有,可以自己控制读写权限
2.对于写可以检测数据的有效性

接下来举个例子,来了解Public与private的使用。

class Person
{

public:
	//设置姓名()
	void setName(string name)
	{
		m_name = name;//向外提供一个公共的成员函数,使得私有数据得以修改
		
	}
	//获取姓名()
	string getName()
	{
		return m_name;//向外提供一个公共的成员函数,使得私有数据输出
	}

	//由于年龄只读,所以在public中只用来获取,如果没有开启书写的权限,那么就只能获取数据
	int getAge()//但是年龄从来没有进行赋值
	{
		/*m_age = 0;*///在输出之前需要进行赋值操作
		return m_age;
	}
	void setAge(int age)
	{
		if (age < 0 || age > 150)
		{
			m_age = 0;
			cout << "待!妖精!" << endl;
			return;//提前终止,使得错误的值没有赋值的可能性
		}
		m_age = age;
	}


	void setLover(string lover)//由public提供写入lover的权限,但是目前没有读取的权限,需要额外添加
	{
		m_lover = lover;
	}


private:
	//姓名   使得姓名可读可写
	string m_name;
	//年龄   只读
	int m_age;
	//情人   只写的权限
	string m_lover;

};



int main()
{
	Person p;
	p.setName("张三");
	/*p.setAge(10);*/
	cout << "姓名为: " << p.getName() << endl;
	cout << "年龄为: " << p.getAge() << endl;
	p.setLover("苍井");//public中,只给了其书写数据的权限

	//通过public以及private来对数据进行读写
	//private设置好参数,而public就是为其提供一个渠道,来对私有数据进行读写

}

在上述代码段中,姓名、年龄、情人都属于私有数据类型。在类外是无法进行读取的!

所以想要对私有数据类型进行读取,就需要在类内进行实现。

代码段中, 函数setName是用来获取外界(main函数)中传递过来的数据(用string name 来接收字符串数据),然后在类内的函数中对私有数据进行修改。这样就可以使得私有数据在类内得到修改,修改后的结果只是得到修改,但是没有办法进行访问,所以public需要提供访问数据的渠道,于是string getName中,返回的就是上一步给的姓名数据。然后在main函数中,通过点操作符访问函数,然后就可以对数据进行访问(即返回了姓名数据)。

所以,总的来说,public是提供了一个渠道,来对私有数据类型进行修改以及访问。然后代码段中的一些其他数据,读者自行查看,总的来说就是对私有数据进行可读可写的修改。

然后举一个具体的例子,设计一个立方体的案例,设计要求如下:

1. 设计立方体类(Cube)
2. 求出立方体的面积与体积
3. 分别用全局函数与成员函数判断两个立方体是否相等


class Cube
{
public:
	int m_L;
	int m_W;
	int m_H;
   

	void set(int a, int b, int c)
	{
		L = a; W = b; H = c;
	}

	int getL()
	{
		return L;
	}
	int getW()
	{
		return W;
	}
	int getH()
	{
		return H;
	}

	int isSame(Cube& x)
	{
		if (m_L == x.getL() && m_W == x.getW() && m_H == x.getH())
		{
			return 1;
		}
		else
		{
			return 0;
		}
	}
	
	


private:

	int L;
	int W;
	int H;

};

using namespace std;
int main()
{
	Cube a;
	a.m_L = 10;
	a.m_W = 10;
	a.m_H = 10;
	Cube b;
	b.set(10,10,10);

	
	int ret = a.isSame(b);//这里访问用点操作符,然后b是需要将成员函数b的参数传递进去的;
	//注意,接收时的数据类型必须要对应上!!
	//(因为b的数据类型为私有,所以需要传递访问,a数据是公有的)传递b后得到对比数据
	if (ret)
	{
		cout << "Same" << endl;
	}
	else
	{
		cout << "unlike" << endl;
	}

	cout << endl;
}

对代码段进行相关说明:数据有两个部分,立方体1放在公共数据中,另一部分就是立方体2放在私有数据中;公告数据直接就可以从main函数中进行修改,而私有数据就可以在类中提供一个访问并修改的渠道。

代码段中,有一段:

int isSame(Cube& x)
	{
		if (m_L == x.getL() && m_W == x.getW() && m_H == x.getH())
		{
			return 1;
		}
		else
		{
			return 0;
		}
	}

这一段是在类内,通过成员函数来对两个立方体来进行对比,以得到两组数据是否完全相等。

这里接收数据用的是引用,即一种指针,指针指向不变,但是指针指向的内容可以修改。指针指向了类,通过类中的访问私有数据类型的渠道,来访问立方体2的数据;(因为是在类内,所以公共类型数据可以直接调用。)

在这里使用引用的好处就是,不需要创建额外的临时空间,从而大大节省了数据空间。

你可能感兴趣的:(c++,java,开发语言)