01-1 封装的意义
封装是c++面向对象的三大特性之一。(复习一下,c++面向对象的三大特性:封装、继承、多态)
封装的意义:
- 将属性和行为作为一个整体用于表示生活中的事物。
- 将属性和行为使用权限进行管控。
提示:对象必须要有属性和行为,缺一不可。
当然,这篇笔记记录的时候封装的意义,对于其的权限管控我们后续研究。
在设计类的时候,一般把属性和行为写在一起,表现事物。
语法:class 类的名称 {访问权限: 属性 / 行为};
试例 1:设计一个圆类,求圆的周长。
#include <iostream>
using namespace std;
//设置圆周率
double Pi = 3.14;
//设计一个圆类,求圆的周长
//周长公式:2*Pi*R
class yuan
{
//访问权限
public: //public:公共权限,属性行为不管在类内或外都可以访问
//属性
//获取圆的半径
int R;
//行为:
//计算园的周长
double zc()
{
double zc = 2 * Pi * R;
return zc;
}
};
int main()
{
//通过圆类 创建具体的圆(对象)
//实例化:通过一个类,创建一个对象的过程。
yuan C1;
//给 C1 赋值
C1.R = 10;
cout << "圆的周长 " << C1.zc() << endl;
return 0;
}
我们来分析一下:
-
首先我们要创建一个类。创建类的语法是:
class 类的名称 {访问权限: 属性 / 行为};
,在上面的例子里面是这样的(去掉注释了)class yuan { public: int R; double zc() { double zc = 2 * Pi * R; return zc; } };
- 访问权限:这里面我们用的是
public
,简单来说就是公共权限,属性行为不管在类内或外都可以访问。当然访问权限我们日后再说。 - 属性:这边属性只有一个 R(半径),因为对于这个需求来说不需要诸如圆心、直径等数据。
- 行为:行为一般使用的是函数来表示。这里使用了一个函数来计算圆的周长。
- 访问权限:这里面我们用的是
-
其次我们要在这个圆的类里面创建出一个具体的圆。
int main() { yuan C1; C1.R = 10; cout << "圆的周长 " << C1.zc() << endl; return 0; }
- 创建类的语法:
类的名称 对象名称;
比如在上面就是yuan C1;
。 - 给类里面的属性赋值:我们创建完成了类中的对象,那么需要给它赋值。这里的赋值比较像结构体,使用
.
来操作对象内的属性。比如我们给对象C1
的属性R
赋值,那么就是C1.R
来操作这个属性。 - 实例化:通过一个类,创建一个对象的过程。我们称其为:实例化。在上面的例子中,
yuan C1;
就是实例化的具体使用。
- 创建类的语法:
试例 2:设计一个学生类,属性有学号和姓名。可以给学号和姓名赋值,可以显示学生的学号和姓名。
我们分析一下:属性有:学号、姓名;行为有:显示学生的学号和姓名。
#include <iostream>
#include <string>
using namespace std;
class studentlist
{
public:
string name;
int id;
void printstudent()
{
cout << "学生姓名:" << name << "\t学号:" << id << endl;
return ;
}
};
int main()
{
studentlist s1;
s1.name = "张三";
s1.id = 1;
s1.printstudent();
return 0;
}
运行结果:(环境:Windows11(arm/Apple M VM)/Visual Studio 2022/Debug/arm64)
学生姓名:张三 学号:1
当然,我们可以以使用行为来给属性赋值。
我们把试例 2的创建类相关的代码找出来:
class studentlist
{
public:
string name;
int id;
void printstudent()
{
cout << "学生姓名:" << name << "\t学号:" << id << endl;
return ;
}
};
我们试试创建新的行为,让行为可以给属性赋值。
class studentlist
{
public:
string name;
int id;
void setname(string nameset)
{
name = nameset;
}
void setid(int idset)
{
id = idset;
}
void printstudent()
{
cout << "学生姓名:" << name << "\t学号:" << id << endl;
return;
}
};
那么我们看一下如何使用:
#include <iostream>
#include <string>
using namespace std;
class studentlist
{
public:
string name;
int id;
void setname(string nameset)
{
name = nameset;
}
void setid(int idset)
{
id = idset;
}
void printstudent()
{
cout << "学生姓名:" << name << "\t学号:" << id << endl;
return;
}
};
int main()
{
studentlist s1;
s1.setname("张三");
s1.setid(1);
s1.printstudent();
return 0;
}
运行结果:(环境:Windows11(arm/Apple M VM)/Visual Studio 2022/Debug/arm64)
学生姓名:张三 学号:1
通过行为给属性赋值。
术语:最后讲一点术语,方便理解他人的代码:
- 成员:类中的属性和行为统一称为成员。
- 成员属性、成员对象:类中的属性。
- 成员函数、成员方法:类中的行为。
- 总结:创建类的语法:
class 类的名称 {访问权限: 属性 / 行为};
。其中,行为一般使用函数表示。
:-)