面向对象和过程的初步介绍
C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。
类
类其实类似于我们C语言中的结构体,不过有对类进行了较多的修改使其更加优秀.
在C语言中我们只能向里面放变量,但是在类里我们可以向里面放函数
如下就是一个类
class date { public: void Init(int year = 1, int month = 1, int day = 1) { _year = year; _month = month; _day = day; } void Print() { cout << _year << "-" << _month << "-" << _day << endl; } private: int _day; int _month; int _year; };
C++习惯使用class来创建类,不过你是用struct来创建类也是可以的=.=,最好使用class
而且C++中我们可以不用typora来省事了直接可以用类名来创建变量.
如我们就可以直接使用
int main() { date a; a.Print(); return 0; }
类的定义
class className { // 类体:由成员函数和成员变量组成 }; // 一定要注意后面的分号
类中的元素称为类的成员:类中的数据称为类的属性或者成员变量; 类中的函数称为类的方法或者成员函数。
一般向类中放函数可以有两种情况
声明定义都放在类中
值将声明放在类中,把定义放在.cpp的文件里
其中声明定义都放在类中的就如我们下面举的例子一样.
class date { public: void Init(int year = 1, int month = 1, int day = 1) { _year = year; _month = month; _day = day; } void Print() { cout << _year << "-" << _month << "-" << _day << endl; } private: int _day; int _month; int _year; };
这样放入类中的函数,编译器默认其为内联函数.不过内联函数是建议具体要看编译器.
第二种情况
类似下面代码
我们一般推荐第二种方式.
(本文为了方便讲解先使用第一种方法)
类的访问限定符与封装
访问限定符
如果我们在C语言中使用结构体来写栈,如果有人不通过我们的函数接口来改变变量也是可以的.
如下图
我们好好的写好的代码就这么被人随便改了,我们后续再写代码的时候直接就一堆错误,非常痛苦.
于是我们的C++语言就加入了public private protected这三个来保护权力
public修饰的成员在类外可以直接被访问
protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
class的默认访问权限为private,struct为public(因为struct要兼容C)
注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别
class date { public: void Init(int year = 1, int month = 1, int day = 1) { _year = year; _month = month; _day = day; } void Print() { cout << _year << "-" << _month << "-" << _day << endl; } private: int _day; int _month; int _year; };
我们的public下到private之间的内容是都是类之外可以访问的.
而我们private到类定义结束的区间都是我们类之外不能访问的.