C++学习之路—面向对象—封装

定义

在C++工程中,往往会有很多类的存在,为了避免类之间的相互影响。应该让类仅仅public一些必须让外界访问的成员,而隐藏private一些不想要公开的成员内容。这种信息的隐藏,就叫做C++类的封装

封装的目的

封装的目的是为了保护私有成员变量

正好唠叨两句C++与C的区别

C++对C的最根本的改变就是把函数放进了结构之中,也就是我们常说的C++的类。C++的类是个很牛的功能,它可以把变量和函数捆绑在一起,其中变量就叫做成员变量,函数就叫做成员函数。同时C++提供了三个关键字来区分这些成员的访问权限:public、private、protected用于声明哪些变量和函数是可以公开访问的、私有的、受保护的,这也就达到了信息隐藏的目的。即让类仅仅公开必须让外界知道的内容,而隐藏其他一切内容

public、private、protected的区别

我们总是知道public是公开的,private是私有的,protected是受保护的。但具体更加细节的访问权限我们应该需要知道。

class Person{
public:
	int name;//比如说名字是可以公开访问的,外部可以随便访问,就放在public下
protected:
	int money;//比如说钱是受保护的,只有自己的类和继承者的类可以使用
private:
	char password;//比如说密码是要保密的,只有在自己这个类里才能访问
};

如何实现

class创建类,如果成员变量为public类型,则外部可以随意赋值,无法保证程序的安全性。所以,将成员变量封装起来,外部就不是随便访问了,如果访问的话需要一些条件才能访问。通过提供公共的getter和setter给外界去访问私有的成员变量。

class Person
{
//public:
//	int m_age;//外部可以随意访问,所以赋值,赋什么值,m_age就是什么值
private:
	int m_age;//将其私有化,外部不可以直接访问,但可以通过setter和getter方法访问,下面要定义

public:
	void setterAge(int age)//这就叫封装里的setter方法
	{
		if (age < 0)return;//对不想要随意乱赋值的变量进行过滤保护,比如:年龄必须大于0之类的
		m_age = age;//通过public成员函数访问private成员变量
	}
	int getterAge()//这就叫封装里的getter方法
	{
		return m_age;//将setter方法赋的值,用getter方法返回,以供访问使用
	}

};

我们要知道类内,public的成员函数是可以访问private的成员变量的,而且是可以对其进行赋值的。但仅限于类内,所以setter和getter方法才可以访问private里的成员变量

int main()
{
	Person person;
	//person.m_age = -4;//举个例子,外部随便赋值age为-4,其实年龄不能是负数,所以这样的变量就不安全,我们要把它封装起来
	person.setterAge(4);
	int age = person.getterAge();
	cout << age << endl;//4

	getchar();
	return 0;
}

然后,我们在类外(例如main函数)就可以通过setter方法访问并赋值类内的私有变量,同时采用getter方法返回被访问的私有变量。这一过程其实就是间接的访问私有成员,这就叫做类的封装。

自己对private成员用途的一些理解

  • 可以让外部访问但是不能随便赋值。比如年龄不能是负数这种。有这样的需求,只需在类中的public下创建setter和getter方法
  • 不想让外部访问,仅仅供类内的一些函数使用。这时候就不需要setter和getter方法了。因为我只想要供类内的函数使用,所以外部不可以随意更改这个值,因为一旦随意更改,类内的函数可能就不是我想要的结果了,所以要把这种成员设置为private
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值