目录
一、 封装:
封装的意义:可以将一个具有统一性的事物的做一个归纳,让它们的属性和行为(方法)作为一个整体,在程序中可以反复使用,并且我们可以对它的属性和方式进行控制。
类中的属性被称为成员属性,类中的函数被称为成员函数(成员方法)。
C++通过创建来支持封装和数据隐藏。
声明一个类:
class new_Class_Name{
public://公共权限
int 属性名;//成员属性
void 函数名(){};//成员函数,也叫做成员方法
};
二、封装的三种访问权限:
(1)public(公共权限):属于公共权限所有属性和方法,在这个类的类内和类外都能访问。
//类内与类外的概念
class new_Class_Name{
//类内
}
//类外
(2)private(私有权限):属于私有权限的所有属性和方法,在这个类的类内能访问但是在类外不能访问,因此如果我们想要访问被设置为私有权限的属性,我们只能在public中设置一个成员函数去访问被设置为私有权限的属性,这个函数就是对外的接口。它与protected很像,它们之间的区别在第3点中会说明。
#include<iostream>
using namespace std;
//定义一个类
class circle {
public:
//用一个公共的成员函数去设置R的值
void set_R(int r) {
R = r;
return;
}
//用一个公共的成员函数去调用R的值
int get_R() {
return R;
}
private:
int R;//R是私有的
};
int main() {
circle o;
o.set_R(10);
cout << "圆的半径是:" << o.get_R() << endl;
}
如果想用点运算符(.)直接调用私有权限的属性是不被允许的
//错误代码
#include<iostream>
using namespace std;
class circle {
private:
int R;
};
int main() {
circle o;
o.R=10;//错误
cout << "圆的半径是:" << o.R << endl;//错误
}
(3)protected(保护权限):跟private(私有属性)很相似,都是类内能访问类外不能访问,它与private唯一的不同点就是这个的子类是能访问的protected中的属性和方法,但是不能访问private中的属性和方法。最重要的是我们能在子类中新增函数,对继承自基类的属性进行修改,这一点是private做不到的。它的优势体现在继承中:
class Father{
public:
private:
int a;
int b;
};
//让a,b进行值初始化
//在这个基类中没有show函数,显示a,b的值
class Son:public Father{
public:
//想新添加一个函数
//实现打印a,b的功能
void show(){
cout<<this.a<<" "<<this.b;
}
};
这么写是错误的,因为:基类中的a,b属性的访问权限是private,在子类中我们无法对继承自基类的private成员添加新方法进行改写,但我们只要将基类中a,b的访问权限改为protected就没问题了。
三、封装的优点 :
- 所有的成员属性在被设置为私有后,可以由我们去控制读写程序。
- 对于读写程序中的写程序,我们可以自由地检测它的有效性。
- 能够更好地对程序的功能进行拓展。
四、class与struct的区别:
class的默认权限是private(私有),而struct的默认权限是public(公有)。这就是它们唯一的区别,在学习C语言的时候,我们并没有提到访问权限的事,但这并不意味着它不存在,我们也可以使用权限访问符对struct进行权限控制。