C++编程——类和对象的封装


类和对象封装的知识结构
在这里插入图片描述

1.封装的意义

封装是C++面向对象三大特性之一
封装的意义:

  • 将属性和行为作为一个整体,表现生活中的事物
  • 将属性和行为加以权限控制

封装中的访问权限
类在设计时,可以把属性和行为放在不同的权限下加以控制
访问权限有三种:

  • 公共权限:public(成员类内可以访问,类外也可以访问)
  • 保护权限:protected(成员类内可以访问,类外不可以访问。但是发生继承关系时,子类可以访问父类的保护内容)
  • 私有权限:private(成员类内可以访问,类外不可以访问。即使发生继承关系,子类
    也无法访问父类的保护内容)

示例:

class Person
{
public:
	//公共权限
	string m_Name;
protected:
	//保护权限
	string m_Car;
private:
	//私有权限
	int m_Password;
public:
	void func()
	{
		//成员类内可以访问
		m_Name = "jack";
		m_Car = "MB";
		m_Password = 12345; 
	}
};


class Son :Person
{
public:
	void func2()
	{
		cout << m_Car << endl;//发生继承关系时,子类可以访问父类的保护内容
		cout << m_Name << endl;//公共属性类型也可访问
		cout << m_Password << endl; //报错,因为私有属性在类外无法访问

	}
};

2. struct和class区别

在C++中struct和class唯一的区别就在于默认的访问权限不同
区别:

  • struct默认权限为公有
  • class默认权限为私有

示例:

class C1
{
	int m_A=100; //默认权限是私有
};


struct C2
{
	int m_A=100; //默认权限是公有
};


int main()	
{
	C2 c2;
	cout << c2.m_A << endl; //结构体中的属性可以正常访问

	C1 c1;
	cout << c1.m_A << endl; //报错
	
	system("pause");
	return 0;
}

3. 成员属性设置为私有

优点1:将所有成员属性设置为私有,可以自己控制读写权限
优点2:对于写权限,我们可以检测数据的有效性

示例:

class Person
{
public:
	//设置姓名
	void setName(string name)
	{
		m_Name = name;
	}

	//获取姓名
	string getName()
	{
		return m_Name;
	}

	//获取年龄
	int getAge()
	{
		return m_Age;
	}

	//设置年龄
	void setAge(int age) // 可以检测数据的有效性
	{
		if (age < 0 || age>150)
		{
			m_Age = 0;
			return;
		}
		m_Age = age;
	}

	//设置情人
	void setLover(string lover)
	{
		m_Lover = lover;
	}

private:
	string m_Name; //姓名 可读可写
	int m_Age; // 年龄 可读可写
	string m_Lover; //情人 只写
};

:如果成员属性设置为公有,那么就无法控制其读写状态,因为公有权限代表在类外也可以访问。那成员设置成私有就可以控制成员的读写状态了吗?私有成员不是在类外无法进行访问吗?可能大家会有这样的疑问。确实,类的私有成员在类外是无法访问的,所以需要在类中提供一些公共的接口,来实现成员灵活的读写。举个简单的例子,如果希望类中的某个属性是可读而不可写的,那就可以在类内实现get_property的接口,而不去实现set_property的接口,这样这个属性的值在类外就能通过get_property读到,而由于该属性是私有,且没有提供set_property的接口,所以不可写。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值