一、前言
如果你想要搞清楚类在编程语言中的作用,可以看一看另一篇文章:结构体、类、接口
本文重在介绍C++中类的各种使用方法。
二、基本使用
C++中声明一个类的关键字是class
,其基本使用如下:
class Test {
public: //权限
int a; //属性
void fun() { //方法
}
};
//使用:
Test t; //根据类定义一个对象
t.a=10; //给对象的属性a赋值
t.fun(); //调用对象中的fun函数
对于一些简单开发来说,只要有上面的这点知识点,其实就已经可以正常写代码了。
因为它满足了我们对类的基本要求:自定义组合属性与方法
虽然在C++中结构体与类已经基本相同了,但结构体最开始的作用仅仅是组合属性。
但为了实现更多强大的功能,C++的类还提供了非常多的特性,满足类的三大基本要求:封装、继承、多态
三、封装
首先是封装,它对应的特性其实就是类中的权限控制。
比如下面这一段代码:
class Stu {
public:
string id; //存放学生id,比如为六位数字,比如:100000
//其它属性方法省略
};
int main() {
Stu s;
s.id = "1000"; //但如果直接赋值,不放6位也一样可以
}
相信大家应该也遇到过,一些卡号、手机号、身份证号都是有一定格式的,如果将其像结构体那样,直接暴露出来,就会出现问题。
因为我们无法控制赋值的格式,而只能被动的写注释去要求别人这样做,这显然是一种非常不安全的行为。
为了达到这样的目的,我们一般就会将其设置为私有的,并只能通过特定的函数对其进行赋值,然后我们就能在这个赋值函数中达到控制格式的目的:
class Stu {
private:
string id; //存放学生id,比如为六位数字,比如:100000
public:
bool set_id(const string& _id) {
if (id.size()==6) { //省略字符判断
id = _id;
return true;
}
else {
return false;
}
}
};
此时我们就用到了private
关键字,只要放在这个关键字后面的属性、方法,外界都是无法访问的,也就是私有的意思。
但我们可以通过在public
关键字后面放开专门去设置这个属性的方法,比如这里的set_id
函数,其作用就是设置它的属性id
。
但不同的地方来了,通过方法来设置对应的属性,我们就可以在这个方法中来控制这个过程了!
int main() {
Stu s;
//s.id = "1000"; //此时不允许直接赋值,编译器直接报错
s.set_id("110011"); //只能通过公有函数间接赋值,达到控制的目的
}
如果传入不符合格式的id
,就会直接赋值失败,从而达到了主动控制的目的。
这样的用法非常常见:属性本身私有化,然后专门为这个属性写两个公有函数,一个用来赋值、另一个用来获取。
也正因为太过于常见了,所以常常还会有getter
、setter
函数的叫法,如下:
class Stu {
private:
string id; //存放学生id,比如为六位数字,比如:100000
public:
//setter函数
bool set_id(const string& _id) {