这一次更新是出于复习目的的更新,算是回顾一下类的知识点吧
类是什么
如果把编程看作是另一个世界的话,那么程序员就像是这个世界里的上帝,或者说的本土化一点,我们就是这个自己定义出的世界里的“女娲”。我们用泥巴捏出一个个生物(定义类、构造类的实例),并时不时补补天(改bug),在C++的世界里,类就是我们要捏的那个“小泥人”。
假如我们是女娲,我们在捏一个生物的过程中总是要思考以下问题:
我的人长什么样?
他能做什么?
这个生物叫什么?
而架构这些概念的过程就是类的定义。
类(class)是面向对象程序设计的最基本的概念,是C++最强有力的特征,是进行封装和数据隐藏的工具,它将一个数据结构与一个操作集紧密地结合起来。类对象是类的实例,用类对象模拟现实世界中的事物比用数据对象更确切。
这就是类,是C++比起C来说最大的特点,如果说写C语言是在写小说,剧情人物都是设定好的,生动流畅;那么写C++就像是写剧本,定义好我要的角色和角色对应的台词,让人一目了然。
类和struct之间的联系与对比
- 类是C++对C中struct结构的扩展,所以C++只是在struct的基础上再进行了进一步提升,将struct改造成了我们现有的概念“类”。
- C语言中struct是数据成员的集合,而C++中的类,则是数据成员和成员函数的集合。(深度理解:注意这只是定义上的差别。在实际中,你会发现其实在C++中struct也可以在内部定义函数,只是在struct中定义出来的函数无法实现数据的保护。实质上,C++能定义函数恰恰是因为struct中能定义函数,只是有了类之后struct在定义上只用做一个数据成员的集合就好了,其他事情由类完成就好了。)
- 结构无法对数据进行保护和权限控制,所以结构中的数据是不安全的。C++中类和数据可以通过权限的控制自己形成一个闭环的生态,这样就能形成一个整体,并且呈现出良好的封装性。
总结:struct和类之间不是独立的关系,而是体现了C++对C的一个继承改造的关系,类让struct的功能变得更好用,并形成了一个个独特的类生态。
类的声明:
类的成员分为两部分:一部分对应数据的状态,称为数据成员,另一部分作用于数据状态的函数,称为成员函数。
class 类名 {
public:
公有数据成员;
公有成员函数;
protected:
保护数据成员;
保护成员函数;
private:
私有数据成员;
私有成员函数;
};
这里就体现出类不同于struct的地方了——出现了不同的数据安全级别。
public:称为公有部分,安全级别最低,其对外是可以直接开放的,跟struct结构中的数据没有区别。
private部分称为私有部分,安全级别最高。这一部分内部的成员外部是不能被外界访问的,**无论什么情况都只能被自己类的成员访问。**外界除非使用该类公有成员中的成员函数对私有成员进行访问,否则任何方式都是非法的。
protected称为类的保护部分,该部分成员可以由本类的成员函数访问,也可以由类的派生类的成员函数访问,而类外的任何访问都是非法的。(就是相比private类多加了一个可让派生类访问的权限。)
注意点:
1.类声明中三种格式不一定都要有,可以缺省,其定义顺序也没有要求。
2.如果没有说明定义的格式,编译器自动把该成员做private处理。
3.类内数据成员的数据类型,可以任意声明,但不能是auto、extern、register
4.不能在类声明中给数据成员赋值。
一个例子:
class Date{ //定义类名一般首字母大写。
public:
void SetDate(int y ,int m, int d);
void showDate();
private:
int m_year;
int m_month;
int m_day;
}; //和结构一样,最后这个分号一定要加上,这是规范。
成员函数的声明
成员函数的声明采用下面的两种方式:
1.像普通函数一样声明,即在类内进行声明,后面直接跟上函数体。
2.类外声明
类外定义的一般形式为:
返回类型 类名::成员函数名(参数表){
//函数体
}
class Coord {
public:
void setCoord (int,int); // 设置坐标点
int getx(); // 取x坐标点
int gety() {return y;}; // 取y坐标点
private:
int x,y;
};
void Coord∷setCoord(int a,int b){ x=a; y=b;}
int Coord::getx(){ return x;}