类和对象--封装和访问控制
1 封装和访问控制
1.1 C语言和C++封装
1.1.1 C语言封装
当单一变量无法完成描述需求的时候,结构体类型解决了这一问题。可以将多个类型打包成一体,形成新的类型。 这是C语言中封装的概念。
特点:将属性和行为分离
1.1.2 C++封装:
用class去封装带行为的类
class 封装的本质,在于将数据和行为,绑定在一起然后能过对象来完成操
作。
特点:
- 将属性和行为作为一个整体,来表现生活中的事物
- 将属性和行为加以权限控制
1.2 封装的访问属性
访问属性 | 属性 | 类内部 | 类外部 |
---|---|---|---|
public | 公有 | 可访问 | 可访问 |
protected | 保护 | 可访问 | 不可访问 |
private | 私有 | 可访问 | 不可访问 |
struct 中所有行为和属性都是public 的(默认)。 C++中的 class可以指定行为和属性的访问方式。
封装,可以达到,对内开放数据,对外屏蔽数据,对外提供接口。达到了信息隐蔽的功能。
比如我们用 struct 封装的类,即知其接口,又可以直接访问其内部数据,这样却没有达到信息隐蔽的功效。而class则提供了这样的功能,屏蔽内部数据,对外开放接口。
1.2.1 struct和class关键字区别
在用struct定义类时,所有成员的默认属性为public
在用class定义类时,所有成员的默认属性为private
2 扩展–尽量将成员属性设置为私有
- 自己可以控制读写权限
class Person
{
public:
int showAge() // 读
{
return m_age;
}
void setName(double weight) // 写
{
m_weight = weight;
}
private:
int m_age; // 控制其权限为只读
double m_weight; // 控制其权限为只写
}
- 可以对设置内容加有效性验证
class Person
{
public:
int showAge() // 读
{
return m_age;
}
bool setAge(int age) // 写
{
if (age > 150 || age < 0)
{
return false;
}
m_age = age;
return true;
}
private:
int m_age; // 控制其权限为读写,并加有效验证
}