类与对象(c++)

上传人:wt****50 文档编号:51150014 上传时间:2018-08-12 格式:PPT 页数:44 大小:252KB
返回 下载 相关 举报
类与对象(c++)_第1页
第1页 / 共44页
类与对象(c++)_第2页
第2页 / 共44页
类与对象(c++)_第3页
第3页 / 共44页
类与对象(c++)_第4页
第4页 / 共44页
类与对象(c++)_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《类与对象(c++)》由会员分享,可在线阅读,更多相关《类与对象(c++)(44页珍藏版)》请在金锄头文库上搜索。

1、第7章 类与对象71 类、对象及数据封装 72 构造函数、析构函数、成员函数、静 态成员与友元 教学目标: 1 掌握类及对象的概念、类与对象的关系、类与对象的差 异 2 掌握构造函数、析构函数的作用及定义 3 了解静态成员、友元等概念。 教学重点: (1) 类和对象概念和定义; (2)构造函数和析构函数解析。 教学难点: 构造函数、析构函数第7章 类与对象7.1 类的定义7.1.1 类的定义 7.1.2 类成员的访问控制 7.1.3 类的成员函数 7.1.4 对象7.1.1 类的定义类的引入:类是一种由用户定义的复杂数据类型,它是将不同类 型的数据及相关的操作封装在一起的集合体.描述客观事物时

2、,必须用不同的数据类型来描述事物 各个不同的方面。如一种商品:商品名称(用字符串描述); 该商品数量(用整型数 描述),该商品单价(用浮点数描述),该商品总价( 用浮点数描述)。 这里用了属于三种不同数据类型的四个数据成员来描述一 种商品。7.1.1 类的定义类的定义的一般格式: /说明部分 class public:protected:private:; /实现部分7.1.1 类的定义类的表述: class Goodsprivate :char name21 ;int amount ;float price , float tValue ;public:setPrice(int p); ;

3、/最后的分号不可少,这是一条说明语句 关键字class是数据类型说明符,指出下面说明的是类。标 识符Goods是商品这个类的类型名。花括号中是构成类 体的系列成员,关键字public是一种访问限定符。7.1.1 类的定义类定义语法格式: class 类名 private:成员表1;public:成员表2;protected:成员表3; ; /注意:所有说明都以分号结束 其中“class 类名”称为类头。花括号中的部分称为类体 ,类体中定义了类成员表, 包含数据和函数.7.1.1 类的定义 成员函数: class Goods private :char name21 ;int amount ;f

4、loat price ;float tValue ; public :void registerGoods(char,int,float); /输 入数据void countTotal(void) ; /计算商品总价值void getName(char) ; /读取商品名int getAmount(void) ; /读取商品数量float getPrice(void) ; /读取商品单价float getTvalue(void) ; ; /读取商品总价值 7.1.1 类的定义封装: 类把数据(事物的属性)和函数(事物的行为操作) 封装为一个整体。 接口:通常数据成员被说明成私有的,函数成员被说

5、明成 公有的;从外部对数据成员进行操作,只能通过公有函 数来完成, 从而使数据受到了良好的保护,不易受副作 用的影响。公有函数集定义了类的接口。成员函数可以直接访问类定义中的任一成员,可以处 理数据成员,也可调用成员函数。 注意: 类是一种数据类型,定义时系统不为类分配存储空间,所 以不能对类的数据成员初始化。类中的任何数据成员也 不能使用关键字extern、auto或register限定其存储类 型。7.1.2 类成员的访问控制访问限定符: public(公共的)说明的成员能从外部进行访问。 private(私有的)和protected(保护的)说明的成员不 能从外部进行访问。每种说明符可在

6、类体中使用多次。访问限定符的作用域是从该说明符出现开始到下一 个说明符之前或类体结束之前结束。如果在类体起始点无访问说明符,系统默认定义为 私有(private)。访问限定符private、protected体现了类具有封装 性。7.1.3 类的成员函数成员函数定义: 成员涵数用来描述事物的行为.成员涵数的说明必须在类体 中进行,但定义既可以在类体中进行,也可以在类体外进 行. (1)通常在类定义中,成员函数仅作声明。函数定义通常在 类的说明之后进行,其格式如下: 返回值类型 类名:函数名(参数表)/函数体 其中运算符“:”称为作用域运算符,它指出该函数是属 于哪一个类的成员函数。 (2)另一

7、种方式是对成员涵数进行说明后,紧接着进行成员 涵数的定义.class Goodsprivate :char name21 ;int amount ;float price , float tValue ;public:float getPrice();float getTvalue();void setPrice(int p) price = p; ; float Goods:getPrice() return(Price) ; float Goods:getTvalue() return(tValue) ; 7.1.3 类的成员函数7.1.4 对象的定义定义对象:对象是类的实例(instan

8、ce)。定义一种数据类型 只是告诉编译系统该数据类型的构造,并没有分配内存 。类只是一个样板,以此样板可以在内存中开辟出同样 结构的实例对象。一个对象必须属于一个已知的类.7.1.4 对象的定义定义对象的格式如下:(); 其中: 类名:为对象所属的类的名称; 对象名:合法的C+标识符,可以一次定义多个对象. 参数表:为初始化对象时所需要的参数.例如: Goods car;这个定义创建了Goods类的一个对象car,同时为它分配 了属于它自己的存储空间,用来存放数据和对这些数据 实施操作的成员函数(代码)。对象存 储: 数据区代码区对象1对象数据区代码区对象 数据区代码区图7.1 各对象完全独立

9、地安排内存的方案图7.1是系统为每一个对象分配了全套的内存。数据区安 放数据成员,代码区安放成员函数。 注意:区别同一个类的各个不同的对象的属性是由数据成 员决定的,不同对象的数据成员的内容是不一样的;而行 为(操作)是用函数来描述的,这些操作的代码对所有对 象都是一样的。7.1.4 对象的定义数据区对象1数据区对象数据区对象 公共代码区图7.2 各对象的代码区共用的方案图7.2仅为每个对象分配一个数据区,代码区(存放成 员函数的区域)为各对象类共用。图7.1对应的是在类说明中定义函数,而图7.2对应的是 在类说明外部定义函数 。7.1.4 对象的定义7.1.4 对象的定义对象的成员就是用来创

10、建该对象的类所定义的成员,包括数 据成员和成员涵数 创建对象之后,就可以使用.和-来访问对象的数据成员和 成员涵数,一般格式如下:.数据成员名 .成员涵数名(参数表)或者-:(const )涵数体特征: 是一种构造涵数,与类名同名,不指定返回值类型; 只有一个参数,且该参数是同类对象的引用; 每一个类都必须有一个拷贝构造涵数,若类中没有定义拷贝 构造涵数,则系统自动生成一个公有的拷贝构造涵数.7.2.3 拷贝构造函数例如:Goods (const Goods price= cgd.price;amount=cgd.amount;tValue=cgd.tValue; 7.2.3 拷贝构造函数实拷

11、贝构造涵数的调用实例: Goods car1(“夏利2000”,30,98000.00); /调用三个参数的构造函数 Goods car2= car1; /调用拷贝构造函数 Goods car3 ( car1); /调用拷贝构造函数,car1为实参 这样三个对象的初始化结果完全一样。 注意:在类定义中如果没有显式给出构造函数时,并不是 不用构造函数,而是由系统自动调用默认的构造函数或 默认的拷贝构造函数。如果有程序设计者定义的构造函 数(包括拷贝构造函数),则按函数重载的规律,调用 合适的构造函数。7.2.4 静态数据成员静态数据成员定义与使用:在类定义中,用关键字static修饰的数据成员为

12、 静态数据成员。 该类所有对象共享由系统为静态成员分配的一个存储空间 ,而这个存储空间是在编译时分配的,在定义对象时不 再为静态成员分配空间。 静态数据是该类所有对象所共有的,可提供同一类的所有 对象之间信息交换的捷径。7.2.4 静态数据成员静态数据成员定义与使用:静态数据成员属于整个类,使用时可用以下格式:类名:静态数据成员名 /在类的外部使用时 注意: (1)静态数据成员在类中声明,但不能在其中定义。(2)静态数据成员的初始化不能在构造函数中进行。7.2.4 静态数据成员【例7.3】用静态数据成员计算由同一类建立的对象的数量执行程序后输出: 对象数量=1 /a0构造函数产生 对象数量=2

13、 /a1构造函数产生 对象数量=3 /a2构造函数产生 对象数量=2 /a2析构函数产生 对象数量=1 /a1析构函数产生 对象数量=0 /a0析构函数产生7.2.4 静态成员函数静态成员函数的引入:当一个函数不需要访问类中除静态数据成员之外的数据时,我 们可以将其定义为静态成员函数。一般情况下,静态成员函数只能访问类中的静态数据成员。静 态成员函数是被一个类中所有对象共享的成员函数,不属于哪 个特定的对象。7.2.4 静态成员函数静态成员函数的使用:将成员函数说明为静态,使该成员函数与该类的不同 对象无关。静态成员函数的调用,在对象之外可以采用下面的 方式:类名:函数名(对象名,参数表);或

14、者任一类对象名:函数名(对象名,参数表);静态函数成员多为公有的。7.2.4 静态成员函数静态成员函数的使用实例: 在下面的程序中,将使用类Car为自己的每一个对象提供了对 象ID号。创建或销毁对象时,将有一静态数据成员记录程序中 的对象数。执行结果是显示对象ID及对象数。7.2.4 静态成员函数 静态成员函数的使用实例:#include class Car private:static int counter; /静态数据成员int id; public:Car(); /构造函数Car(); /析构函数static void display(); /静态成员函数void displayID(

15、); ;7.2.4 静态成员函数 静态成员函数的使用实例:int Car:counter=0; /定义静态数据成员 Car:Car() counter+; id = counter; Car:Car() counter-; cout“Object number “id“ being destroyed“; void Car:display() /static function cout “Number of objects created is = “counterendl; void Car:displayID() cout “Object ID is “idendl; 7.2.4 静态成员函数 静态成员函数的使用实例:int main() Car a1;Car:display();Car a2, a3;Car:display();a1.displayID();a2.displayID();a3.displayID();return 0; 在C+中,友元(friend)函数允许在类外访问该类中的 任何成员,就象成员函数一样

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 教育/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号