第2章 类和对象初步

【结构化程序设计的不足】
数据结构+算法=程序(结构化程序设计的特点)
结构化程序设计也称为面向过程的程序设计。
结构化程序在规模变大时会难以理解和维护。
结构化的程序不利于修改和扩充(增加新功能)。

【面向对象程序设计的概念和特点】
面向对象的程序设计有“抽象”、“封装”、“继承”、“多态”四个基本特点
类+类+……+类=面向对象的程序

抽象:将同一类事物的共同特点概括出来
特点包括两个方面:属性和方法。
属性指的是对象的静态特征,可以用变量表示。方法指的是对象的行为,以及能对对象进行的操作,可以用函数表示。方法可以对属性进行操作。

封装:通过某种语法形式,将数据(即属性)和用以操作数据的算法(即方法)捆绑在一起,在形式上写成一个整体,即“类”。
通过封装,可以将对象的一部分属性和方法隐藏起来,让这部分属性和方法对外不可见,而留下另一些属性和方法对外可见,作为对对象进行操作的接口。这样能合理的安排数据的可访问范围,减少程序不同部分之间的耦合度,从而提高代码扩充、代码修改、代码重用的效率。

继承:以现有代码为基础方便地扩充出新的功能和特性,以现有的类作为基类,使得新类从现有的类“派生”而来,从而达到代码扩充和代码重用的目的。

多态:不同种类的对象都具有名称相同的行为,而具体行为的实现方式却有所不同。

需要指出的是,面向对象的程序设计方法也离不开结构化的程序设计思想。编写一个类内部的代码时,还是要用到结构化的设计方法。
而且,面向对象程序设计方法的先进性主要体现在编写比较复杂的程序。

【类的定义和使用】
访问范围说明符:public、private、protected 可以出现任意多次。
成员变量和成员函数出现的先后次序没有规定。一个类的成员函数之间可以互相调用。类的成员函数可以重载,也可以设定参数的默认值。
对象可以看作“类变量”

【类的示例程序剖析】
在C++中,一个对象占用的内存空间大小等于其成员变量所占用的内存空间的大小之和。
**每个对象都有各自的存储空间。**一个对象的某个成员变量被改变后,不会影响另一个对象。成员函数并非每个对象各自存有一份。成员函数和普通函数一样,在内存中只有一份,但是它可以作用于不同的对象。
所谓成员函数作用在某个对象上,指的是进入该成员函数时,函数中访问到的成员变量是属于该对象的。

【访问对象的成员】
还可以用指针->成员名或者引用名.成员名的方式来访问对象的成员。
调用类的成员函数时,必须指明其所作用的对象。
类还有另一种写法,就是将class关键字换成struct,没有成员函数的struct还是称作结构,结构变量不是对象;有成员函数的struct就是类。
和结构变量一样,对象之间可以用“=”互相赋值,但不能用==、!=、<、>、<=、>=进行比较运算,除非这些运算符经过适当的重载

【类成员的可访问范围】
private:用来指定私有成员。一个类的私有成员,不论是成员变量还是成员函数,都只能在该类的成员函数内部才能被访问。
public:用来指定公有成员。一个类的公有成员在任何地方都可以被访问。
protected:用来指定保护成员。
三种关键字出现的次数和先后次序都没有限制。成员变量的可访问范围由离它前面最近的那个访问范围说明符决定。如果某个成员前面没有访问范围说明符,则对class来说,该成员默认地被认为是私有成员;对struct来说,该成员默认地被认为是公有成员。

类的成员函数内部可以访问任何同类对象的私有成员。

【“隐藏”的作用】
设置私有成员的机制叫做“隐藏”。“隐藏”的一个目的就是强制对成员变量的访问一定要通过成员函数进行。这样做的好处是,如果以后修改了成员变量的类型等属性,只需要修改成员函数即可;否则,所有直接访问成员变量的语句都需要修改。
可见,“隐藏”有利于程序的修改。
“隐藏”机制还可以避免对对象的不正确操作。有的成员函数只是设计用来让同类的成员函数调用的,并不希望对外开放,因此就可以将它们声明为私有的,隐藏起来。只留下必要的接口(即一些成员函数)来对对象进行操作,这样能够避免类的使用者随意使用成员函数和成员变量而导致错误。

小结
面向对象的程序设计方法具有抽象、封装、继承、多态四个基本特征。
类的成员有成员变量和成员函数两种。
成员函数之间可以互相调用,成员函数内部可以访问成员变量。
私有成员只能在类的成员函数内部访问。默认情况下,类的成员是私有的。
可以用“对象名.成员名"、“引用名.成员名”、"对象指针->成员名"的方法访问对象的成员变量或调用成员函数。成员函数被调用时,可以用上述三种方法指定函数是作用在哪个对象上的。
对象所占用的存储空间的大小等于各成员变量所占用的存储空间的大小之和(如果不考虑成员变量对其问题的话)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值