结构化程序设计
C语言使用结构化程序设计:程序=数据结构+算法。程序由全局变量以及多个相互调用的函数组成,算法以函数的形式实现,用于对数据结构进行操作。
结构化程序设计有许多不足,主要包括:
1.结构化程序设计中,函数和其操作的数据结构,没有直观的联系。
2.随着程序规模的增加,程序变得难以理解:比如很难看出某个数据结构到底有哪些函数可以对其进行操作,任意两个函数之间到底存在怎样的调用关系。
3.结构化程序设计没有封装和隐藏的概念。要访问某个数据结构的某个变量,就可以直接访问,那么当该变量的定义有改动的时候,就要把所有访问该变量的语句找出来修改,十分不利于程序的维护和扩充。
4.同时也难以查错,当某个数据结构的值不正确时,难以找到是哪个函数导致的。
5.重用:在编写某个程序时,发现其需要的某项功能,在现有的某个程序里已经有了相同或类似的实现,那么自然希望能够将那部分代码抽取出来,在新程序中使用。
5.总之,结构化程序,在规模庞大的时.会变得难以理解,难以扩充,难以查错,难以重用。
面向对象程序设计
上述问题可以通过面向对象的程序设计解决。面向对象程序设计=类+类+…..+类。设计程序的过程,就是设计类的过程。
面向对象的程序设计方法:
1.将某类客观事物共同特点(属性)归纳出来,形成一个数据结构(可以多个变量描述事物的属性);
2.将这类事物所能进行的行为也归纳出来,形成一个个函数,这些函数可以用来操作数据结构(这一步叫“抽象”)。
然后,通过某种语法形式,将数据结构和操作该数据结构的函数捆绑在一起,形成一个“类”,从而使得数据结构的算法呈现出显而易见的紧密关系,这就是封装。面向对象程序设计具有抽象、封装、继承、多态四个基本特点。
类和对象
从客观事物抽象出类
例:写一个程序,输入矩形的长和宽,输出面积和周长。
这里就可以将长宽变量和设置长宽,求面积,求周长的三个函数封装在一起,就能形成一个矩形类。
长宽变量成为该矩形类的成员变量,三个函数称为该类的成员函数。成员变量和成员函数统称为类的成员。实际上,类看上去就像带函数的结构。
1 |
|
通过类,就可以定义变量。类定义出来的变量,也称为类的实例,也就是所谓的对象。C++中,类的名字就是用户自定义的类型的名字。可以像使用基本类型那样来使用它。CRectangle就是一种用户自定义的类型。
对象的内存分配
和结构对象一样,对象所占用的内存空间大小,等于所有成员变量的大小之和。对于上述的CRectangle类,sizeof(CRectangle)=8。每个对象各有自己的存储空间,一个对象或某个成员变量被改变了,不会影响到另一个对象。
和结构变量一样,对象之间可以用“=”进行赋值,但是不能用“==”,“ !=”,“ >”,“ <”,“ >=”,进行比较,除非这些运算符经过了重载。
用法1:对象名.成员名
1 | CRectangle r1,r2; |
Init作用在r2上,即Init函数执行期间访问的w和h是属于r2这个对象的,执行r2.Init不会影响到r1。
用法2. 指针->成员名
1 | CRectangle r1,r2; |
用法3. 引用名.成员名
1 | CRectangle r2; |