struct和class都是类,但class中可以加入函数。类的基本思想是数据抽象与封装。数据抽象是一种依赖接口和实现分离编程的技术。
数据抽象包括两部分,包括一组数据和对这些数据的操作。Struct所定义的类中的数据都是默认为public,即是类外的函数也可以对这些数据进行操作,而对于class定义的类,数据在没有说明的时候默认为私有,则若要访问这些数据就必须通过类中的函数或则是友元函数,也可以通过将数据定义在public中,这样定义的数据便与struct中的数据一样,任何函数都可以进行访问。
为了防止数据被他人修改,需要对数据进行加密,这就引进了访问限定符
Public:公有成员声明
此限定符下的数据都可以访问
Private:私有成员声明
只有内部函数和友元函数对其中的数据进行访问。
内部函数:
定义内部函数时可以在类内部对内部函数的内容进行说明,也可以在类外进行说明,类外说明的方式:
代码语言:javascript复制 Class nh{
Public
Int ex();
};在定义完类之后一定要加;
Int nh::ex()
{
函数体; }
友元函数: 友元函数也可以访问类中的私有成员,定义友元函数样例:friend 函数返回类型 函数名();紧跟类的最后对友元函数进行定义。但友元函数的关系不能进行传递,即a是b的友元函数,b是c的友元函数,但是a不是c的友元函数。同时友元函数的关系不能进行继承 Protected:被保护成员声明 访问器与修改器: 访问器与修改器一般命名为set与get,其他的名字也可以,放在public中,其中的函数体则是对类中的数据进行修改或则读取。 以下就是对以上知识点的一个案例。
代码语言:javascript复制 Class student{
Int m;
Public:\public下的成员皆为共有的,即不必须用成员函数和友元函数来访问public中的数据
Int getm();
Friend int print(student &a);\一般在定义友元函数时最好用传引用 };
Int student::getm()\成员函数的类外定义(::前面是成员函数所属类,后面则是函数的名字,代表函数是属于student类的)
{ Return m;} Int print(student &a) \print 为全局函数,但print是友元函数,故也可以访问类中的元素
{ Cout<<a.m; Return 0;}
这样便可以通过成员函数和友元函数来访问内部元素。 在类中有着一种新型的指针,称为this指针,每个成员函数又有一个隐含的参数,就是this指针,即在某个类中的this指针相当于该类的指针,例如有一个类为x,则该类的this指针类型为x*.类的this指针只能在成员函数中使用,尤其是在函数的参数与类中的一个变量相同时就可以使用,例如:
代码语言:javascript复制 Int m;
Int lk(int m){ this->m=m;}\函数中参数m的值赋给类中的m
构造函数与析构函数: 构造函数用于对内部数据的初始化,既可以对类中的内部数据进行初始化,是的数据变得有意义,构造函数的函数名必须与类的名字相同。析构函数与构造函数的作用悄悄相反,析构函数则是在类被使用结束之后,进行善后,即是返回已经使用完的类的资源he自动释放资源。像定义的new类型变量,在用delete进行销毁时就会自动调用析构函数,定义时析构函数的名字应是~类的名字。类中有默认的构造函数与析构函数 ,在未对他们进行定义时,系统会默认调用系统中默认的构造函数与析构函数。定义构造函数时至少定义两个构造函数,其中一个构造函数是有参的,另一个是无参的,构造函数后可接赋值列表,赋值列表在函数名之后,后接一个:,之后便是赋值列表,赋值顺序是定义成员的顺序,并且构造函数是无返回值的,但不同于void。虽然可以在定义成员之后在对成员进行赋值,但是构造函数时还可以在进行赋值的同时,对这些数据还可以进行各种操作,而自定义析构函数的作用也是如此,可以在该类消亡时做一些你所期望的操作,例如在文件结束时可以输出一段话,或更改一些东西。 例:
代码语言:javascript复制Class KL{
Int m;
Public:
KL() {}
KL(int k):m(k)\构造函数{ } ~KL()\析构函数 { 函数体 }
};
Static函数: 一个类中的对象数据只有自己的对象使用,而为了是他们同类的数据可以进行共享,便引入了static成员,这种成员共享于这个类,这个类中不同的对象可以共用这个函数。 Static成员可以是变量也可以是一个函数定义方式:static 要定义的成员。 类的定义使得数据有了封装性,并且更好的保证数据的安全,例如在一些比较重要的数据向客户展现时,为了不使客户不修改数据,可将开放的成员函数只有读的函数,从而只能看,而不能写,构造函数则使得一些数据的初始化有了新的方法,const的函数可以更加保护类中数据不被修改,而static函数则是将相同类的对象连接在一起。