中国地质大学C课件

上传人:我*** 文档编号:145157422 上传时间:2020-09-17 格式:PPT 页数:61 大小:218KB
返回 下载 相关 举报
中国地质大学C课件_第1页
第1页 / 共61页
中国地质大学C课件_第2页
第2页 / 共61页
中国地质大学C课件_第3页
第3页 / 共61页
中国地质大学C课件_第4页
第4页 / 共61页
中国地质大学C课件_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《中国地质大学C课件》由会员分享,可在线阅读,更多相关《中国地质大学C课件(61页珍藏版)》请在金锄头文库上搜索。

1、第 八 章 类 和 对 象 Class Void f(char,float); Void f(int,int); Void f(int,float); 运算符重载: 为运算符+ - * / 等赋以新的含义,以 实现类对象的运算。,C+ Programming Language,8.2 类(Class)的概念,类是对现实世界中的客观事物的抽象,将具有相同属性的一类事物称作类,类的实例称为对象。 类是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关的操作封装在一起的集合体。 类具有对数据的抽象性、隐藏性和封装性。 类对象的行为由类的内部数据结构和相关的操作确定;外部行为通过操作接口实现。人

2、们关心的就是操作接口所能提供的服务。,C+ Programming Language,The aim of the C+ class concept is to provide the programmer with a tool for creating new types that can be used as conveniently as the built-in types. A class is a user-defined type. The classes logically dont differ much from built-in types. Ideally such

3、types should not differ from built-in types in the way they are used, only in the way they are created.,C+ Programming Language,类可以看作是结构体的扩展,struct student int num; char name20; float score5; float aver; 求学生5门课程得平均成绩: struct student s1; int i; for (i = 0, s1.aver = 0; i 5; i+) s1.aver += s1.scorei;

4、s1.aver /= 5; cout“aver=”s1.averendl;,C+ Programming Language,在OOP中,数据及其方法集合在一起,求学生平均 成绩主要是设计一个类CStudent:,class CStudent private: int num; char name20; float score5; public: float CStudent:aver() float t = 0; for (i = 0; i 5; i+) t += scorei; return t / 5; void print(); ;,void CStudent:print() couta

5、ver()endl; void main() CStudent s1; s1.print(); ,C+ Programming Language,类的定义,类定义包括两个部分: 1、说明部分(“做什么”): 数据成员(名称、类型) 成员函数(方法) 2、实现部分(“怎么做”): 成员函数的定义和实现,C+ Programming Language,类定义的一般格式 : (1)说明部分 class 类名 public: 公有段数据及成员函数 private: 私有段数据及成员函数 protected: 保护段数据及成员函数 ; (2)成员函数的实现部分 (注意与结构体比较),C+ Program

6、ming Language,说明: (1)class是定义类的关键字; (2)类的成员函数的实现部分也可以直接写在类的说明部分; (3)类名通常是以大写字母C开头的标识符; (4)关键字public、private、protected 为访问权限控制符(Access Control),规定成员的访问权限,他们出现的顺序和次数无限制;,公有(public)成员提供了类的接口功能,不仅可以被成员函数访问,而且可以在程序中被访问; 私有(private)成员是被类隐藏的数据,只有该类的成员或友元函数才可以访问,通常将数据成员定义为私有成员。类中默认情况下的成员是private的 ; 保护(prote

7、cted)成员具有公有成员或私有成员的特性。,C+ Programming Language,类,类的封装性,C+ Programming Language,【例8.1 】简单复数类示例 /ex8_1.h #includeiostream.h #includemath.h /类的说明部分 class CComplex private: double m_dReal; double m_dImag; public: void Init(double r, double i); double GetReal(); double GetImag(); double GetAbs(); ;,C+ Pr

8、ogramming Language,/类的实现部分 void CComplex:Init(double r, double i) m_dReal = r; m_dImag = i; inline double CComplex:GetReal() return m_dReal; inline double CComplex:GetImag() return m_dImag; double CComplex:GetAbs() double t; t = m_dReal * m_dReal + m_dImag * m_dImag; return sqrt(t); ,C+ Programming

9、Language,也可以将GetReal()和GetImag()定义在类说明里面: #includeiostream.h #includemath.h /类的说明部分 class CComplex private: double m_dReal; double m_dImag; public: void Init(); double GetReal()return m_dReal; double GetImag()return m_dImag; double GetAbs(); ;,C+ Programming Language,函数Init全名是CComplex : : Init(doulb

10、e ,double) 类名CComplex的作用是Init是指出Init(double,double)是CComple的一个成员函数,而不是其它类的成员函数,也不是普通函数。没有类名的函数也称为非成员函数。成员函数也称为方法,它多出现于面向对象方法论中。 “ :”叫作用域区分符,指明一个函数属于哪个类或一个数据数据属于哪个类。 “ :”可以不跟类名,表示全局数据或全局函数(即非成员函数)。,将类定义和其成员函数定义分开,是目前开发程序的通常 做法。我们把类定义(头文件)看成是类的外部接口,类成员 函数定义看成是类的内部实现。将类拿来编制应用程序时, 只需类的外部接口(头文件)。这和我们使用标准

11、库函数的 道理是一样的,即只需包含某函数声明的头文件。因为类定 义中,全部包含了类中成员函数的声明。,C+ Programming Language,在类定义的外部定义成员函数,比在类内部定义时,成员函数名前多加上一个类名。如果该函数的前面没有类“类名:”表达式把它与该类紧紧连在一起,编译器会认为该函数是一个普通函数,它与类中的成员函数有相同的名字。以后连接时,会查出缺少与成员函数相对应的对应而报错。 在类定义内部定义成员函数时,类名是省略的。 类名加在成员函数名之前而不是加在函数返回类型前。 例如:下面的代码不该将类名加在成员函数定义的最开头: CComplex : void GetInit

12、(double r, double t) /error . ,C+ Programming Language,匈牙利命名规则,变量名以一个或多个小写字母开始,表示变量的数据类型,每个有意义的单词首字母大写 前缀:,C+ Programming Language,这些符号可以多个同时使用,顺序是先m_(标记成员变量)再指针,再简单数据类型,再其他。例如:m_lpszStr, 表示指向一个以0字符结尾的字符串的长指针成员变量。,C+ Programming Language,8.3 对象(Object),类和对象 类是一种抽象的数据类型,编译器并不给它分配内存。 对象是类的实例,任何一个对象都是属

13、于某个已知类的。 定义对象的两种方法: (1)在声明类时,直接定义对象,格式为: class 类名 声明类的成员 对象名; (2)声明类以后,像定义其他变量一样定义对象,格式为: 类名 对象名;,C+ Programming Language,例如定义类CComplex的对象时,可用如下两种方法: class CComplex private: double m_dReal; double m_dImag; public: void Init(); double GetReal(); double GetImag(); double GetAbs(); A, B; 或者在定义类后用: CCom

14、plex A, B; 对象数组或对象指针也可以使用上面的方法定义,例如: CComplex *p, s10;,C+ Programming Language,对象的使用 对象的成员与它所属类的成员一样,有数据成员和成员函数,对象的使用体现在对数据成员和成员函数的使用上。 对象访问成员的方法与结构变量访问成员变量的方法相同。 访问一般对象的成员: . .() 访问指向对象的指针的成员: - - (),C+ Programming Language,【例8.2】写出程序的运行结果 /ex8_2.cpp #includeex7_1.h void main() CComplex A, *PA = ,C

15、+ Programming Language,类成员缺省的访问权限是私有的,只能在类内使用。 【例8.3】指出下面程序中的语法错误 /ex8_3.cpp #includeiostream.h #includemath.h class CPoint int m_iX; int m_iY; public: void SetX(int k) m_iX = k; void SetY(int k) m_iY = k; int GetX()return m_iX; int GetY()return m_iY; ;,C+ Programming Language,void main() CPoint p1,

16、 p2; /* p1.m_iX = 5; */ p1.SetX(5); /* p1.m_iY = 10;*/ p1.SetY(10); p2.SetX(15); p2.SetY(20); /double d1=p1.m_iX * p1.m_iX + p1.m_iY * p1.m_iY; double d1=p1.GetX() * p1.GetX() + p1.GetY() * p1.GetY(); d1 = sqrt(d1); double d2=p2.GetX() * p2.GetX() + p2.GetY() * p2.GetY(); d2 = sqrt(d2); coutp1到原点的距离为:d1endl; coutp2到原

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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