类和对象--封装和访问控制
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; // 控制其权限为读写,并加有效验证
}
本文介绍了C++中的封装概念,对比了C语言与C++在封装上的差异。C++的class允许指定成员的访问属性,如public、protected和private,实现信息隐蔽。struct默认所有成员为public,不具备封装优势。文中强调了将成员属性设为私有的重要性,以控制数据的读写权限,并举例展示了如何通过setter和getter方法进行有效验证。

被折叠的 条评论
为什么被折叠?



