收藏 分享(赏)

第1章 C++基础.ppt

上传人:jw66tk88 文档编号:7901797 上传时间:2019-05-29 格式:PPT 页数:34 大小:166.50KB
下载 相关 举报
第1章 C++基础.ppt_第1页
第1页 / 共34页
第1章 C++基础.ppt_第2页
第2页 / 共34页
第1章 C++基础.ppt_第3页
第3页 / 共34页
第1章 C++基础.ppt_第4页
第4页 / 共34页
第1章 C++基础.ppt_第5页
第5页 / 共34页
点击查看更多>>
资源描述

1、第1章 C+基础,1.1 简单C+程序,例Ex_Simple 一个简单的C+程序#include void main()double r, area; / 声明变量coutr; / 从键盘上输入r的值area = 3.14159 * r * r; / 计算面积cout“圆的面积为:”area“n”;/ 输出面积,该程序经编译、连接、运行后,屏幕上显示: 输入圆的半径: 此时等待用户输入,当输入10并按Enter键后,屏幕显示: 圆的面积为:314.159 Press any key to continue 这就是程序运行的结果。,1.1 简单C+程序,例Ex_Root 一个求解一元二次方程的C

2、+程序 #include #include int GetRoot(float a, float b, float c, double *root); /* 声明一个全局函数 */ void main() float a = 2.0, b = 6.0, c = 3.0; / 定义并初始化变量double root2;int n = GetRoot(a, b, c, root); / 调用函数if (n1)cout“方程无根!“; else cout“方程有 “n“ 根:n“;for (int i=0; in; i+) / 循环输出所有的根cout“根“i+1“: “rooti“t“;coute

3、ndl; ,1.1 简单C+程序,/ 求一元二次方程的根,函数返回根的个数 int GetRoot(float a, float b, float c, double *root) double delta, deltasqrt;delta = b*b - 4.0 * a * c;if (delta0.0) return 0; / 无根deltasqrt = sqrt(delta);if (a!=0.0) root0 = (-b + deltasqrt)/(2.0 * a);root1 = (-b - deltasqrt)/(2.0 * a); elseif (b!=0.0) root0 =

4、root1 = -c/b;else return 0; if (root0 = root1) return 1;else return 2 方程有 2 根: 根1: -0.633975 根2: -2.36603,1.2 类和对象,从结构到类 类的定义 对象的定义,1.2.1 从结构到类,例Ex_StructToClass 从结构到类的示例 #include struct STUSCORE char strName12; / 姓名char strStuNO9; / 学号float fScore3; / 三门课程成绩 ; float GetAverage(STUSCORE one) / 计算平均成

5、绩 return (float)(one.fScore0 + one.fScore1 + one.fScore2)/3.0); void main() STUSCORE one=“LiMing“, “21020501“, 80,90,65;coutone.strName“ 的平均成绩为: “GetAverage(one)“n“; 运行结果如下: LiMing 的平均成绩为: 78.3333,1.2.2 类的定义,类一般分为声明部分和实现部分。,类体,C+中定义类的一般格式如下:class ,private:,public:;,class是定义类的关键字,class的后面是用户定义的类名,用 大

6、写的C字母开始的标识符作为类名,C用来表示类(Class),以与对象、函数及其他数据类型相区别。类中的数据和函数是类的成员,称为数据成员和成员函数。,1.2.2 类的定义,CStuScore类包含了SetScore和GetAverage成员函数,分别用来输入成绩和返回计算后的平均成绩:,class CStuScore public: / 公有类型声明char strName12; / 姓名char strStuNO9; / 学号void SetScore(float s0, float s1,float s2) / 成员函数:设置三门课成绩fScore0 = s0; fScore1 = s1;

7、 fScore2 = s2;float GetAverage();private: / 私有类型声明float fScore3; / 三门课程成绩 ; / 注意分号不能省略float CStuScore:GetAverage()return (float)(fScore0 + fScore1 + fScore2)/3.0);类CStuScore中,成员函数SetScore是在类体中定义,GetAverage是类的外 部定义,注意两者的区别。,1.2.2 类的定义,定义类时还应注意:,(1) 在“public:”或“private:”后面成员都是公有或私有的,直到下一个“public:”或“pr

8、ivate:”出现为止。(2)关键字public和private在类中出现多次,前后的顺序没有关系。(3)除了public和private外,关键字protected也可修饰成员的类型。(4)数据成员的类型可以是任意的,包含整型、浮点型、字符型、数组、指针等。(5)将类单独存放在一个文件中或将类的声明放在.h文件中而将成员函数的实现放在与.h文件同名的.cpp文件中。Visual C+ 6.0为用户创建的应用程序框架中都是将各个类以.h和同名的.cpp文件来组织的。,1.2.3 对象的定义,一个类定义后,就可以定义该类的对象,如下面的格式:类名是用户已定义过的类的标识符,对象名可以有一个或多个

9、,多个时要用 逗号分隔。CStuScore one, *two, three2;,1.2.3 对象的定义(续),一个对象就是该对象的类所定义的成员,引用(访问)时可用下列方式:.() 前者表示引用数据成员,后者表示引用成员函数。“.”是成员运算符,用来引用对象成员。one.strName, three0.GetAverage(); 对于指针对象的成员引用可用下列方式:-() “-”也是一个成员运算符,与“.”运算符的区别是:“-”用来访问指针对象的成员,而“.”用来访问一般对象的成员。下面的两种表示是等价的:-(*).,1.3 类的成员及特性,构造函数 析构函数 对象成员初始化 常类型 thi

10、s指针 静态成员 友元,1.3.1 构造函数,C+规定:构造函数必须与相应的类同名构造函数不能指定函 数返回值的类型,也不能指定为void类型。,class CStuScore public:CStuScore(char str12) / 第一个构造函数 strcpy(strName, str);CStuScore(char str12, char strNO9) / 第二个构造函数 strcpy(strName, str);strcpy(strStuNO, strNO);char strName12; / 姓名char strStuNO9; / 学号. ,1.3.1 构造函数,需要说明的是:

11、(1) 程序中的strcpy是C+的一个库函数,用来复制字符串,使用时需要头文件string.h。 (2) 在类定义时,如果没有定义任何构造函数,则编译器自动为类生成一个不带任何参数的默认构造函数。对于CStuScore类来说,默认构造函数的形式如下: CStuScore( ) / 默认构造函数的形式 (3) 由于构造函数的参数只能在定义对象时指定,因此有:CStuScore oOne(“LiMing“); 它是自动调用第一个构造函数,使得strName内容为“LiMing”。若有:CStuScore oTwo;,1.3.2 析构函数,析构函数也要与相应的类同名,并在名称前面加上一个“”符号。

12、,class CStuScore public:. CStuScore ( ) / 析构函数. ,析构函数只有在两种情况下才会被自动调用:(1) 当对象定义在一个函数体中,该函数调用结束后,析构函数被自动调用。(2) 用new为对象分配动态内存后,当使用delete释放对象时,析构函数被自动调用。,1.3.3 对象成员初始化,为了能对这些对象成员进行初始化,C+允许采用这样的构造函数定义格式: :(形参表):对象1(参数表), 对象2(参数表), , 对象n(参数表),需要说明的是:,(1) 类的成员对象必须初始化,但不能将成员对象直接在构造函数体内进行初始化 。,(2) 对象成员初始化时,必

13、须有相应的构造函数,且多个对象成员的构造次序不是按初始化成员列表的顺序,而是按各类声明的先后次序进行的。,(3)对象成员初始化也可在类构造函数定义时进行。,(4) 事实上,成员初始化列表也可用于类中的普通数据成员的初始化。,1.3.4 常类型,常类型是指使用类型修饰符const说明的类型。 常对象 常对象是指对象常量,定义格式如下:const 定义常对象时,同样要进行初始化,并且该对象不能再被改变,修饰符const可以放在类名后面,也可以放在类名前面。,常成员函数 使用const关键字进行声明的成员函数,称为常成员函数。只有常成员函数才有资格操作常量或常对象。 常成员函数说明格式如下:() c

14、onst;,1.3.4 常类型,常数据成员类型修饰符const不仅可以说明成员函数,也可以说明数据成员。由于const类型对象必须被初始化,并且不能被改变。在类中声明const数据成员后,只能通过构造函数初始化方式来对常数据成员初始化。,所谓“引用”,实质上是给一个已定义的变量起 一个别名,系统不会为引用类型变量分配内存空间, 只是使引用类型变量与其相关联的变量使用同一 个内存空间。,1.3.5 this指针,例Ex_This this指针的使用,#include class COne public: COne() x = y = 0; COne(int a, int b) x = a; y

15、= b; void copy(COne ,private:int x, y; ; void COne:copy(COne ,1.3.6 静态成员,静态数据成员和静态成员函数。,静态数据成员静态数所成员是同一个类中所有对象共享的成,而不是某一对象的成员。 静态数据成员始化须在类的外部进行,与一般数据成员初始化不同,它的格式如下: :=,2. 静态成员函数静态成员函数和静态数据成员一样,它们都属于类的静态成员,但它们都不是对象的成员。,1.4 继承和派生类,单继承 派生类的构造函数和析构函数 多继承,1.4.1 单继承,1. 公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派

16、生类 的成员时,它们都保持原有的状态,而基类的私有成员仍 然是私有的。,2. 私有继承(private) 私有继承的特点是基类的公有成员和保护成员都作为派生 类的私有成员,并且不能被这个派生类的子类所访问。,3. 保护继承(protected) 保护继承的特点是基类的所有公有成员和保护成员都成为 派生类的保护成员,并且只能被它的派生类成员函数或友 元访问,基类的私有成员仍然是私有的。,1.4.2 派生类的构造函数和析构函数,派生类对象在建立时,先执行基类的构造函数,然后执行派生类的构造函数。在对派生类进行初始化时,需要对其基类设置初值,可按下列格式进行:(总参表): (参数表1), (参数表2

17、), (参数表n), 对象成员1(对象成员参数表1), 对象成员2(对象成员参数表2), , 对象成员n(对象成员参数表n) . ,1.4.3 多继承,多继承下派生类的定义是按下面的格式: class : , ,. ; 其中的继承方式还是前面的三种:public、private和protected。 例如: class A . class B . class C:public A,private B .,1.5 多态和虚函数,虚函数 纯虚函数和抽象类,1.5.1 虚函数,例Ex_VirtualFunc 虚函数的使用#include class CShape public:virtual flo

18、at area() / 将area定义成虚函数 return 0.0; ;,1.5.1 虚函数(续),class CTriangle:public CShape public:CTriangle(float h, float w) H=h; W=w; float area() return (float)(H * W * 0.5); private:float H, W; ;,1.5.1 虚函数(续),class CCircle:public CShape public:CCircle(float r) R=r; float area() return (float)(3.14159265 *

19、 R * R); private:float R; ;,1.5.1 虚函数 (续),void main() CShape *s2;s0 = new CTriangle(3,4);coutarea()area()endl; ,1.5.2 纯虚函数和抽象类,若在基类中不能为虚函数给出一个有意义的实现时,可将其声明为纯虚函数,其实现留待派生类完成;抽象类是至少包含一个纯虚函数的类。它本身不能定义为对象。纯虚函数的声明格式class virtual ()=0;,习 题,定义一个描述学生基本情况的类,数据成员包括姓名,学C+英语和数学成绩,成员函数包括输出数据、设置姓名和学号、设置三门课的成绩,求出总成

20、绩和平均成绩。2. 设有一个描述坐标点的CPoint类,其私有变量x和y代表一个点的x、y坐标值。编写程序实现以下功能:利用构造函数传递参数并设其默认参数值为60和75,利用成员函数display输出这一默认的值;利用公有成员函数setpoint将坐标值修改为(80, 150),利用成员函数display输出修改后的坐标值。,习 题,3. 下面是一个类的测试程序,给出类的定义,构造一个完整的程序执行程序时的输出为; 输出结果:200 60 = 140主函数为:void main()CTest c;c.init(200, 60);c.print(); 4. 定义一个人员类CPerson,包括数据

21、成员:姓名、编号、性 别和用于输入输出的成员函数。在此基础上派生出学生类CStudent(增加成绩)和教师类CTeacher(增加教龄),并实现对学生和教师信息的输入输出。,习 题,5. 把定义平面直角坐标系上的一个点的类CPoint作为基类,派 生出描述一条直线的类CLine,再派生出一个矩形类CRect。要 求成员函数能求出两点间的距离、矩形的周长和面积等。设计 一个测试程序,并构造完整的程序。,6. 定义一个字符串类CStrOne,包含一个存放字符串的数据成员, 能够通过构造函数初始化字符串,通过成员函数显示字符串的内 容。在此基础上派生出CStrTwo类,增加一个存放字符串的数据 成员,并能通过派生类的构造函数传递参数,初始化两个字符串, 通过成员函数进行两个字符串的合并以及输出。(字符串合并可使 用标准库函数strcat,需要包含头文件string.h),定义一个抽象类CShape,包含纯虚函数Area(用来计算面积)和SetData(用来重设形状大小)。然后派生出三角形CTriangle类、矩形CRect类、圆CCircle类,分别求其面积。最后定义一个CArea类,计算这几个形状的面积之和,各形状的数据通过CArea类构造函数或成员函数来设置。编写 一个完整的程序。 8.上机练习本章的示例。,习 题,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报