下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一二章C C+基础变量 C+中用于命名和存储数据的编程结构称为变量Type_Name Variable_Name_1,Variable_Name_2,.;陷井:未初始化的变量变量声明后,除非程序为变量赋值,否则变量不包含有意义的值。 那么如果忘记 给变量赋值,程序运行时使用这个变量就会出现不可预知的错误。整型(int Types )4 个字节-21474836482147483647编译器的机器字长总是与整型的位长有关如:32位编译器的整型数一定为32位长字符型: 表示范围:有符号:-128127无符号:0255枚举型:自定义整数区间,甚至列举单个整数值en um Week Mon, Tue
2、, Wed, Thu, Fri, Sat, Sun ;最大特点是可以给每个值指定一个在程序中直接使用的标记(枚举符)布尔型:表示范围仅含整数0和1,也可以表示成true和false,浮点数float浮点数的表示范围:4个字节10A(-38)10A(38)浮点数的操作:常规的加、减、乘、除等操作双精度浮点数double8 个字节 10A(-308)10A(308)陷井:整形之间进行算术运算结果仍为整形。数组(Arrays )数组是同类元素的集合,它的元素排列在连续的空间中,按下标来标记,描述数组必须给出元素类型和元素个数int a5 = 1,2,3,4,5;容器(vector )容器与数组的共同
3、特征是元素的排列在逻辑上是线性序列结构,可以用下标进行访问。向量可以按需创建,拷贝创建,局部拷贝创建,异类拷贝和创建vectorvint> a(n);if分支语句基本形式if (Boolea n_Expressi on _1)Stateme nt_1else if(Boolea n_Expressi on _2)Statement_2.else if(Boolean_Expression_n)Statement_nelseStatement_For_Other陷井:连续不等式 有时在做连续不等式的判断时,经常会有人按照数学中的写法编写,如: if (x<z<y)陷井: =与=
4、陷井: else 的配对问题switch 分支语句基本形式switch (Controlling_Expression)case Constant_1:statement_sequance_1break;case Constant_2: statement_sequance_2break;case Constant_n:statement_sequance_nbreak;default:default_statement_sequence 陷井:忘记 breakwhile 循环基本形式while (Boolean_Expression)Statement_1Statement_2Stateme
5、nt_3 do-while 循环基本形式doStatement_1Statement_2Statement_3while (Boolean_Expression);for 循环基本形式for (Initialization_Action; Boolean_Expression; Update_Action)Statement_1Statement_2 陷井: for 语句后多余的分号 如果在for后面加了 “”目当于for的循环体为空转移语句 breakbreak除了用在switch之外,还用在循环语句中,用于终结所在层次的循环。 转移语句 continue 转移语句 goto 语句注意:慎用
6、 goto 语句 指针指针是变量的内存地址。 指针必须初始化或者赋值 (指向了数据 )后,才能进行 间接访问 (间访)操作。Type_Name* point;int* ip; int iCount = 18;int* iPtr = &iCount; / 初始化数组与指针 数组名本身就是表示元素集合的首地址指针限定const int a = 78;int b = 10;int c = 18;const int* ip = &a;/const 修饰指向的实体类型常量 (的)指针 int* const cp = &b;/ const 修饰指针 *cp 指针 (的 )常量 in
7、t const* dp = &b; / 等价于上一句指针常量 const int* const icp = &c;/ 常量指针常量*ip = 87;/ 错:常量指针不能修改指向的常量ip = &c;/ ok :常量指针可以修改指针值*cp = 81;/ ok:指针常量可以修改指向的实体cp = &b;/ 错:指针常量不能修改指针值,即使是同一地址*icp = 33; / 错:常量指针常量不能修改指向的常量 icp = &b;/ 错:常量指针常量不能修改指针值int d = *icp; / ok动态指针(动态变量)newint* p; p = new in
8、t(3);C+标准规定,若没有足够的内存来创建新变量,操作符new默认会终止程序delete操作符delete用于销毁一个动态变量陷井:虚悬指针对一个指针使用delete时,它所指向的动态变量会被销毁。之后,指针变量的值进入未定义状态:也就是说你不知道它指向哪里。最好的做法时在delete p后对p 进行空赋值 p = null;引用 引用必须初始化,因为引用总是附属于某个实体 int someInt = 5;int& rInt = someIne; / 初始化 引用多用在函数参数的传递上 函数( function ) 函数调用 函数调用是一个表达式,由函数名和随后的带圆括号的实参构成
9、。 语法: Function_Name(Argument_List)其中,Argument_List是一个用逗号分隔的实参列表。程序运行时内存分布与栈机制一个程序要运行, 就要先将可执行程序文件装载到计算机的内存中。 装载的 过程是操作系统控制的, 一般而言, 操作系统将程序装入内存后, 将形成一个随 时可以运行的进程空间,该进程空间分为四个区域:代码区 (code area)数据区 (data area) 堆区(heap area) 栈区(stack area) 代码区:用于存放程序的执行代码。 所谓执行代码就是索引了一个个函数块代码, 它由函数定义块的编译得到。 数据区:存放全局数据、常量
10、、静态全局量和静态局部量。 堆区:存放动态内存,供程序随即申请使用。 栈区:存放函数数据区,它动态的反映了程序运行中的函数状态。栈区操作 C+的函数调用过程,需要初始化和善后的处理环节。函数调用的整个过程就是 栈空间操作的过程。函数调用时,C+做一下工作:1. 建立被调用函数的栈空间,大小由函数定义体中的数据量多少决 定;2. 保护调用函数的运行状态和返回地址;3. 传递参数;4. 将控制权转交给被调函数;5. 函数运行完成后,复制返回值到函数数据块底部;6. 恢复调用函数的运行状态;7. 返回调用函数。自定义函数 函数的描述总共分为两部分,分别为函数声明和函数定义。 函数声明指出了为了一个函
11、数调用所需知道的一切。 它指出函数名称; 函数需要 多少个实参;这些实参应该是什么类型,以及返回类型。语法: Type_Returned Function_Name(Parameter_List);函数定义 函数定义描述了该函数如何计算它的返回值。函数头的写法与函数声明相 同,只是函数头末尾没有分号。 函数体跟在函数头后面, 由声明和可执行语句构 成,并统一放在一对花括号内。函数声明通常在 main 之前,定义通常在 main 之后。Type_Returned Function_Name(Parameter_List);Type_Returned Function_Name(Parameter
12、_List)Declaration1Declaration2Executable_Statement_1;Executable_Statement_2;陷井:函数调用实参顺序错误 如果调用函数时的实参顺序与形参顺序不匹配, 可能造成参数类型不匹配的错误 void 函数中的 return 语句 void 函数和要返回一个值的函数, 都包含 return 语句。对于要返回一个值的函数, return 语句就指定了那个返回值。对于 void 函数, return 语句的作用只是终止函 数调用。函数调用时的参数传递方式: 传值调用方式,传引用调用方式 传值调用,形参与实参是简单的值拷贝关系,没有直接联
13、系。 传引用调用,形参与实参是内存映射关系,有直接联系。 使用指针作为形参也是一种传值的调用方式!注意: 传值调用形参是局部变量函数重载 注意:重载函数时,函数名相同,形参必须有所区别。如果两个定义唯一区别就 是返回值的类型,则不能重载函数名称。对象的基本定义:对象是同时包含数据和行为的实体。 对象是有责任的实体! !数据隐藏在面相对象中, 数据用属性来表示, 函数用方法来表示。 限制对某些属性或 方法的访问被称为数据隐藏。封装对象无需公开它的所有属性和方法。 只应公开同它交互所需的接口。 与使用 对象无关的细节应该隐藏,这就是所谓的封装。类的接口 接口要描述的是类的对外接口,也就是类怎样对外
14、服务。 接口服务的实现细节对于用户来说是隐藏的。 关于实现应当记住: 实现的改 动不应该要求修改用户代码, 尽可能少的提供接口。 可重用的类往往具有更抽象 的接口,而不是具体的接口。UML 图UML 统一建模语言。用于可视化地、专门化地构造和说明软件密集型系统产品的图形语言。向用户提供了一种标准的制作系统蓝图的方法,一种图形化地表示和处理面向对象系统的方法。不是一种可视化的程序设计语言,而是一种可视化的建模语言;不是工具或知识库的规格说明,而是一种建模语言规格说明,是一 种表示的标准;不是过程,也不是方法,但允许任何一种过程和方法使用它。各种UML图UML提供了九种不同的图,可以分成两大类,一
15、类是静态图,包括用例图、 类图、对象图、组件图、配置图;另一类是动态图,包括序列图、协作图、状态 图、和活动图。也可以根据它们在不同架构视图的应用,把它们分成: 在用户模型视图:用例图,描述系统的功能; 在结构模型视图:类图,描述系统的静态结构;对象图,描述系统 在某个时刻的静态结构;在行为模型视图:序列图,按时间顺序描述系统元素间的交互; 协 作图,按照时间和空间的顺序描述系统元素间的交互和它们之间的 关系;状态图,描述了系统元素的状态条件和响应;活动图,描述 了子系统元素的活动;在实现模型视图:组件图,描述了实现系统的元素的组织; 在环境模型视图:展开图,描述了环境元素的配置,并把实现系统
16、 的元素映射到配置上。类图类图是用类和它们之间的关系描述系统的一种图示,是从静态角度表示系统 的。类的UML表示是一个长方形,垂直地分为三个区,如图所示。顶部区域显示 类的名字。中间的区域列出类的属性。底部的区域列出类的操作。类图中的继承继承通过指向超类的一条闭合的,单箭头的实线表示。依赖某一模型元素需要另一个模型元素所提供的规格或实现时,两者之间的关系 称为依赖。类A依赖类B,就是类A使用到了类B,而这种使用关系是具有偶 然性的、临时性的、非常弱的,但是 B类的变化会影响到 A。依赖关系表现在 代码层面时,被依赖类B作为参数被依赖类A在某个method方法中使用。Checkout+check
17、Out(i n card : CreditCard) : void关联当进行系统建模时,特定的对象间将会彼此关联,而且这些关联本身需要被 清晰地建模。所以关联(association)是对象之间最常见的关系,用来连接有结 构关系的对象。关联的图示为实线,实线两端可以连接两个不同的类。下图中Team类中有Player类型的属性,属性名为 goalieternary association关联中的箭头不是代表方向性,而是在标示导航性。在 UML2中,关联的箭头 端代表具有导航性。打个小叉就是不可导航;单纯直线代表还未指定可导航或不 可导航。AB是双向关联。CD两端都不具有导航性。EF尚未指定两端是
18、否具导航性。GH为单向关联,可由G导航到H。I端还未决定可否导航,可以确定的是,可由I导航到J。具有导航性的关联端可以有两种表示方式。比如下图中,size关联端可以使用左边的属性表示法,也可以使用右边的关联端表示法。下图可以理解为:一个顾客可以拥有一个到多个的账户; 但是一个账户只能由一个顾客所拥有。CustomerlowerValue, upperVa luemultiplicity element组合与聚合聚合与组合都具有整体-部分的特性,唯一的差别在 于部分可否分享。聚合 关系中的部件可以与其他整体分享,但是组合关系中的部件则由整体独自拥有。聚合聚合是关联关系的一种特例,他体现的是整体与
19、部分、拥有的关系,此时整 体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整 体对象,也可以为多个整体对象共享;AirportPlaneO0.1 *组合组合关联是关联关系的另一种特殊形式,他体现的是一种 con tai ns-a的 关系,这种关系比聚合更强;他同样体现整体与部分间的关系, 但此时整体与部 分是不可分的,子类实例的生命周期依赖于父类实例的生命周期, 整体的生命周 期结束也就意味着部分的生命周期结束。PersonBrain11继承、实现、依赖、关联、聚合与组合对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或 者类与接口间的纵向关系;其他的四者关系则
20、体现的是类与类、或者类与接口间 的引用、横向关系,是比较难区分的,有很多事物间的关系要想准备定位是很难 的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分 各种关系;但总的来说,后几种关系所表现的强弱程度依次为:组合> 聚合关联依赖;序列图序列图的主要目的是定义事件序列,产生一些希望的输出。重点不是消息本身,而是消息产生的顺序;不过,大多数序列图会表示一个系统的对象之间 传递的什么消息,以及它们发生的顺序。活动图活动图是一个行为图,通常用来表达业务流程、工作流程或者系统流程 中一连串的动作。结构(struct)C+的内部数据只有简单的整数和浮点数等简单的数据类型,有时
21、还常 常需要获得一个由不同(异种)类型的值构成的集合,再将集合视为一个整体来 进行处理。struct Pointdouble x;double y;Point fisrtPoint, secondPoint;firstPoint.y = 10.23;结构定义可以嵌套使用。如下所示:struct linePoint startPoint;Point endPoint;类类是一个数据类型,它的变量就是对象。对象( object)除了具有成员 函数,还能容纳数据值。所以,在一个 C+程序中,类的定义应该是一个数据类 型定义,它描述变量能容纳哪些种类的值,以及成员函数有哪些。类的一般形式:class
22、Class_Namepublic:Member_Specification_1;Member_Specification_2;Member_Specification_n;private:Member_Specification_n+1;Member_Specification_n+2; /不要忘记分号class Person private: string name; string address; int gender; int age;public:Person();Person(string name, int age); string getName(); /成员函数声明 strin
23、g getAddress();void setName(string newName); void setAddress(string adr); int getGender();void setAge(int age);int getAge();Person:Person() gender = 1;Person:Person(string name, int age) this->name = name; this->age = age;string Person:getAddress() return address;string Person:getName() return
24、 name;int Person:getGender() return gender;void Person:setAge(int age) this->age = age;int Person:getAge() /成员函数定义 return age;int main(int argc, char *argv)Person person("kerwin", 28); cout<<"NAME: "<<person.getName()<<endl; cout<<"GENDER: "if
25、(person.getGender() = 1) cout<<"MALE"<<endl;else cout<<"FEMALE"<<endl; cout<<"AGE: "<<person.getAge()<<endl;/成员函数调用 system("PAUSE"); return EXIT_SUCCESS; 类的变量声明 一个类类型的变量(也就是对象)在声明时,采用的方式与预定义类型 的变量相同,也与结构变量的声明相同。Person
26、xiaoWang, xiaoLi;Person* xiaoWang = new Person();Person xiaoWang“( xiaoWang”, 28);Person* xiaoWang = new Person“( xiaoWang”, 28); 常成员 const 参数修饰符 如果使用一个传引用调用参数,而且函数不会更改参数值,就可为参数 前添加修饰符const。这样的参数被称为常参数。如果一个成员函数不更改它的调用对象的值, 就应该在函数声明中添加 修饰符con st。const要放到函数声明之后,刚好在末尾的分号之前。函数定义头 也应该包含一个con st,与函数声明匹配。v
27、oid Sample:output() const 在使用常成员函数时要注意:(1) const 是函数类型的一个组成部分,因此在函数实现部分也要带有 const 关键字。(2) 常成员函数不更新对象的数据成员,也不能调用该类中没有用const修饰 的成员函数。(3) 常对象只能调用它的常成员函数,而不能调用其他成员函数。 ->操作符在C+中有一个和指针一起使用的操作符,用来指明结构或类的某个成 员。该操作符就是箭头操作符“ ->”。this 指针 当定义类的成员函数时,常常需要使用到调用对象。 this 指针就是一个 预定义的指向调用对象的指针。静态成员 静态变量 一个类的所有对
28、象往往需要共享一个变量。 这种共享的变量称为静态变 量。不像普通的数据成员, static 数据成员独立于该类的任意对象而存在;每个 static数据成员是与类关联的,并不与该类的对象相关联。静态成员函数正如类可以定义共享的static数据成员一样,类也可以定义static成员函 数。static成员函数没有this形参,它可以直接访问所属类的static成员,但不能 直接使用非static成员。使用类的static成员可以通过作用域操作符“::”从类直接调用static成员,或者通过对象、 引用或指向该类类型对象的指针间接调用。定义static 成员在成员声明前加上关键字 static将成员
29、设为static。static成员遵循正常 的公有 /私有访问规则。class Student private:static int classCount;public:static void setClassCount(int count);int Student:classCount;/要在main函数前面对所有类中的静态成员进行声明int main(int argc, char *argv)testAsPoint();system("PAUSE"); return EXIT_SUCCESS;构造函数 构造函数是特殊的成员函数,只要创建类类型的新对象,都要执行构造 函数
30、。构造函数的工作是保证每个对象的数据成员具有合适的初始值。 构造函数 的名字与类的名字相同, 并且不能指定返回类型。 它们可以没有形参, 也可以定 义多个形参。构造函数可以被重载。class Sales_itempublic:Sales_item(const std:string&);Sales_item(std:istream&);Sales_item();构造函数初始化式 与任何其他函数一样,构造函数具有名字、形参表和函数体。与其他函 数不同的是,构造函数也可以包含一个构造函数初始化列表:Sales_item:Sales_item(const string &boo
31、k): isbn(book), units_sold(0), revenue(0.0) 构造函数初始化列表以一个冒号开始, 接着是一个以逗号分隔的数据成 员列表,每个数据成员后面跟一个放在圆括号中的初始化式。 构造函数初始化列 表仅指定用于初始化成员的值, 并不指定这些初始化执行的次序。 成员被初始化 的次序就是定义成员的次序。初始化式可以是任意表达式 一个初始化式可以是任意复杂的表达式。Sales_item(const std:string &book, int cnt, double price): isbn(book), units_sold(cnt), revenue(cnt
32、* price) 类类型的数据成员的初始化式 初始化类类型的成员时,要指定实参并传递给成员类型的一个构造函 数。可以使用该类型的任意构造函数。Sales_item(): isbn(10, '9'), units_sold(0), revenue(0.0) 析构函数 构造函数的一个用途是自动获取资源。何时调用析构函数Sales_item *p = new Sales_item;Sales_item item(*p);delete p; / 销毁指针时调用析构函数 / 超出作用域,调用 item 的析构函数class Sales_itempublic:Sales_item(c on
33、st std:stri ng&);Sales_item() / 个什么都不做的析构函数; 一使用继承时,就是让子类继承父类的属性和操作,子类可以声明新的属性和操作,还可以剔除那些不适合其用途的父类操作。派生类对象结构基类对象ab子类对象基类部分'子类添加部分/Exte nd.h#include <iostream>#in clude "Base.h"#ifndef CLASS_EXTEND #defi ne CLASS_EXTENDusing n amespace std;class Exte nd: public Base private:in t c;public:Exte nd();Exte nd();void showC();#endifprotected关键字被 protect 关键字修饰的成员的访问级别居于 public 和 private 之间,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026湖南常德市石门县部分事业单位公开招聘工作人员25人考前冲刺密卷完美版附答案详解
- 2026安徽蚌埠市某国企招聘会计1人考前冲刺试卷附答案详解【达标题】
- 2026年甘肃省兰州博文科技学院博士研究生及急需紧缺专业人才招聘(第六期)备考题库带答案详解(典型题)
- 2026年滁州经开区管委会公开招聘雇员25名考前冲刺密卷附完整答案详解(夺冠系列)
- 2026福建三明市中共永安市委社会工作部关于公开招聘编外聘用人员1人考前冲刺试卷附完整答案详解【网校专用】
- 2026第三季度广西一键游数智文旅产业集团有限公司社会招聘12人模拟试卷(考点提分)附答案详解
- 2026重庆渝富控股集团有限公司第三批实习生招聘3人备考题库含答案详解【夺分金卷】
- 2026语言文字应用研究所招聘1人(非事业编制)备考题库及参考答案详解【完整版】
- 2026浙江温州市瓯海区娄桥街道办事处招聘编外人员6人考试备考试题及答案详解
- 2026年宁蒗彝族自治县事业单位人员招聘考试参考题库及答案解析
- 建筑企业会计习题库(附答案)
- 《园林植物配置》课件
- 部编人教版四年级数学上册全册教案全集
- 《全国森林经营规划(2016-2050年)》
- 2023年政府采购评审专家资格考试题库(浓缩500题版)
- 《挡土墙技术状况评定规范》
- 《四川省海绵城市建设技术导则(试行)》
- 3.14 丝绸之路的开通与经营西域(教案)2024-2025学年统编版七年级历史上册
- 《抖音:短视频与直播运营(慕课版)》-课件-项目六-抖音直播的复盘
- GB/T 10739-2023纸、纸板和纸浆试样处理和试验的标准大气条件
- 第八章 有色金属及合金的分析
评论
0/150
提交评论