前言:
人:
属性:身高,体重,出生时间,家庭地址等;
行为:走路,刷题,刷视频,追剧等;
封装的作用:将对象的属性与行为结合起来,共同表示一个整体,而非 “植物人”--只有属性没有行为 ,而是一个真正的人;
封装的格式:
class{权限 属性 行为(函数)}
权限分为三种:
private:私有,(类内可以调用,在类外无法进行操作)
protected:保护,(类内可以调用,在类外无法进行操作)
public:公开,(类内类外都可以随意调用)
注意:
1.封装使用struct 以及 class 都是可以的,语法一致;
唯一的区别在于:struct默认权限为 公开,class默认权限为 私有;
protected与private的区别:
涉及到继承;
以下以一个例子说明:父亲有一辆车和银行卡,其中车设置权限为保护,而不希望儿子拿银行卡乱花,因此将银行卡的密码设置为私有;
那么他的儿子,如果想要开车可以拿上钥匙开走,而外人不可以(不然就是违法行为);
但是他的儿子无法拿到银行卡的密码,也就不能使用银行卡,同样外人就更不可能拿到密码了;
封装的具体实现:
设计一个学生类,其中包含了他的名字(name)、学号(id)以及学分(credit),并且设计行为,使得可以查看并且修改名字、学号、学分;
//学生类 可对名字以及学号进行赋值,也可以显示学号和名字,但是不可以直接调用名字以及学号
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
class student {
private:
//类型
string name;
string id;
int credit;
public:
//行为
void setcredit(int a_credit) {//设置学分
credit = a_credit;
}
void setname(string a_name) {//设置名字
name = a_name;
}
void setstudentid(string a_studentid) {//设置学号
id = a_studentid;
}
int getcredit() {//获取学分
return credit;
}
string getname() {//获取名字
return name;
}
string getstudentid() {//获取学号
return id;
}
};
int main() {
student student1;
string a_name, a_studentid;
int a_credit;
cout << "请分别输入学生:名字 学号 学分" << endl;
cin >> a_name >> a_studentid>>a_credit;
student1.setname(a_name);
student1.setstudentid(a_studentid);
student1.setcredit(a_credit);
cout << "学生 : " << student1.getname() << endl;
cout << "学号 : " << student1.getstudentid() << endl;
cout << "学分 : " << student1.getcredit() << endl;
return 0;
}
封装属性设置为私密:
在封装时,属性最好设置为私密,然后通过行为(函数)来控制对属性的权限--是否可以查看或者修改,以免造成误操作;