C++程序设计教程全书课件完整版ppt全套教学教程最全电子教案教学设计(最新).pptx
《C++程序设计教程全书课件完整版ppt全套教学教程最全电子教案教学设计(最新).pptx》由会员分享,可在线阅读,更多相关《C++程序设计教程全书课件完整版ppt全套教学教程最全电子教案教学设计(最新).pptx(1010页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第1章 初识C+, 默认参数 函数重载 引用, 命名空间 控制台输入输出 类型增强, 字符串类 new/delete 强制类型转换,1.1.1 C+发展史,C+是由Bjarne Stroustrup(比雅尼斯特劳斯特鲁普)博士在贝尔实验室工作期间发明并实现的。最初C+被称为new C,后来为了体现它是一种带类的面向对象语言,将其改名为C with class。直到1982年,Bjarne Stroustrup博士将C with class命名为C+。,1.1.1 C+发展史,C+的发展大致可以分为三个阶段: 第一阶段从C+语言出现到1995年,这一阶段C+语言基本上是传统类型上的面向对象语言,
2、并且依靠接近C语言的效率,在计算机中占据着相当大的比重。在这期间Bjarne Stroustrup博士完成了经典巨著The C+ Programming Language第一版;诞生了一个传世经典ARM;之后模板、异常、命名空间等相继被加入。,1.1.1 C+发展史,第二阶段从1995到2000年,这一阶段由于STL库和后来的Boost库等程序库的出现,泛型编程设计在C+中的比重越来越大。同时由于Java、C#等语言的出现和硬件的影响,C+受到了一定的冲击。 第三阶段从2000年至今,以Loki、MPL等程序库为代表的产生式编程和模板元编程的出现,使C+迎来了发展史上的又一个高峰。这些新技术和
3、原有技术的融合,使C+成为当今主流程序设计语言中最复杂的语言。,1.1.2 C+的特点,1.保持与C兼容 C+既保留了C语言的所有优点,又克服了C语言的缺点,其编译系统能检查出更多的语法错误,因此C+比C语言更安全。绝大多数C语言程序可以不经修改直接在C+环境中运行,用C语言编写的众多库函数可以用于C+程序中。C+设计成与C兼容,完成了从C到C+的平滑过渡。,1.1.2 C+的特点,2.支持面向对象编程 C+引入了面向对象的概念,使得开发人机交互类型的应用程序更为简单、快捷。通过类的层级关系进行编程,实现功能可扩展和增强的接口。具有诸如JAVA、PHP、Python等面向对象编程语言的特性。,
4、1.1.2 C+的特点,3.拥有丰富的库 利用C+中的标准模板库STL,如set、map、hash等容器,可以快速编写代码。除此之外,数不胜数的第三方库,如扩充C+标准库的Boost库、图形库QT、图像处理库OpenCV、机器学习库Tensorflow、线性代数库Eigen、游戏库OpenGL等,这些优秀的库为企业的项目开发提供了非常大的支持,是必不可少的部分。,1.1.2 C+的特点,4.支持嵌入式开发 C+在嵌入式开发领域有重要的地位,智能设备在生活随处可见,如智能手表、机器人等,这些智能设备的底层驱动和上层应用开发离不开C+语言的支持。C+11标准中增加的新特性,如原子操作、常量表达式、
5、线程同步机制等,能够更加紧密的和硬件结合。,1.1.2 C+的特点,5.类型安全增强 C+和C语言属于强类型语言,C语言中可以进行强制类型转换,相对自由灵活。在C中强制类型转换被认为是设计的不合理,为了兼容C语言提供了三种类型转换形式。,1.1.2 C+的特点,6.支持垃圾回收机制 大多数面向对象编程语言具有垃圾回收机制,而C+语言不具备垃圾回收机制,意味着申请的内存资源在使用完成后要自己释放还给系统。C+11标准的新特性智能指针,实现了内存资源的自动管理,使指针更加灵活并避免了内存泄漏。,1.2 第一个C+程序,1 #include 2 using namespace std; 3 int
6、main() 4 5cout hello C+ endl; 6 return 0; 7 ,例1-1 hello.cpp,1.2 第一个C+程序,C+程序文件以.cpp为扩展名,头文件仍然以.h为扩展名。但是,C+标准程序库头文件,一般不以.h结尾。例如,包含数学函数的头文件时,一般使用“#include”,而不使用“#include”。,1.2 第一个C+程序,第1行代码:包含了输入输出头文件 iostream,它是C+标准库头文件。 第2行代码:引用标准命名空间std。 第37行代码:定义main()函数。 第5行代码:在屏幕上输出“hello C+”。 第6行代码:通过return返回0。
7、,1.3.1 命名空间,命名空间是C+语言的新特性,它能够解决命名冲突问题。例如,小明定义了一个函数swap(),C+标准程序库中也存在一个swap()函数。此时,为了区分调用的是哪个swap()函数,可以通过命名空间进行标识。,1.3.1 命名空间,1.标准命名空间 std是C+标准命名空间,由于C+标准库几乎都定义在std命名空间中,所以编写的所有C+程序都需要引入下列语句。要使用标准命名空间的内容必须先声明才能使用,声明方式如下: using namespace std;,1.3.1 命名空间,2.自定义命名空间 自定义命名空间使用namespace定义,其格式如下: namespace
8、空间名 /可以是变量、函数、类、其他命名空间 ,1.3.1 命名空间,命名空间的使用有三种方式: (1)命名空间名加上作用域标识符“:”标识要使用的实体。 在引用处指明变量所属的空间,例如,使用标准命名空间的标准输出和换行符,示例代码如下: std:coutC+std:endl;,1.3.1 命名空间,(2)使用using关键字,在要使用空间实体的上面,使用using关键字引入要使用的空间变量。例如,使用标准命名空间的标准输出,示例代码如下: using std:cout; coutC+; 这种情况下,只能使用using引入的标识符,例如,std空间里endl不能被使用,但可以使用std:en
9、dl的形式使用。,1.3.1 命名空间,(3)使用using关键字直接使用要使用的变量所属的空间,示例代码如下: using namespace std; 这样引入std空间后,则std中定义的所有实体都可以被使用了。但这种情况下,如果引用多个命名空间往往容易出错。例如,自定义swap()函数,标准库也有swap()函数,调用swap()函数就会出现二义性错误。,多学一招:匿名命名空间,(3)匿名命名空间 命名空间还可以定义成匿名的,即创建命名空间时不写名字,由系统自动分配。 namespace /可以是变量、函数、类、其他命名空间 ,(3)匿名命名空间 编译器在编译阶段会为匿名命名空间生成唯
10、一的名字,而且还会为这个匿名的命名空间生成一条using指令,且生成的空间名是不可见的。匿名空间在编译后等效于下面的代码: namespace _UNIQUE_NAME /可以是变量、函数、类、其他命名空间 using namespace _UNIQUE_NAME_;,多学一招:匿名命名空间,匿名空间的作用是限制了命名空间的内容仅能被当前源文件使用,其他源文件是无法访问的,使用extern声明访问是无效的。,注 意,多学一招:匿名命名空间,1.3.2 控制台输入输出,C+控制台常用的输入输出是由cin和cout对象实现的,他们定义在头文件 iostream 中,其作用类似于C语言中的 scan
11、f()函数和printf()函数。,1.3.2 控制台输入输出,1.cin cin与运算符“”结合使用,用于读入用户输入,以空白(包括空格、回车、TAB)为分隔符。,# 读入单个变量 char c1,c2; cinc1; cinc2; # 读入多个变量 string s,y; float f; cinsy; /一次读入多个相同类型的变量 cinsf; /一次读入多个不同类型的变量,1.3.2 控制台输入输出,2.cout cout与运算符“”结合使用,用于向控制台输出信息,称作标准输出对象或屏幕输出对象,但cout也可以重定向输出到磁盘文件。,1.3.2 控制台输入输出,(1)cout输出常量
12、值 cout10endl; coutaendl; coutC+endl;,(2)cout输出变量值 /输出单个变量 int a =10; coutaendl; /输出多个变量 int a = 10; char *str = abc; couta,strendl;,1.3.2 控制台输入输出,(3)cout输出指定格式的数据 使用cout输出指定格式的数据时,可以通过C+标准库提供的标志位和操作符控制格式,使用这些操作需要包含iomanip头文件。 输出八进制、十进制、十六进制数据 int a =10; coutoct:octaendl;/以八进制输出 coutdec:decaendl;/以十进
13、制输出 couthex:hexaendl;/以十六进制输出,1.3.2 控制台输入输出,输出指定精度数据 doublef=3.1415926; cout默认输出:fendl; cout精度控制setprecision(7)setiosflags(ios:fixed)fendl; 输出指定域宽、对齐、填充方式的数据 coutsetw(10)3.1415endl; coutsetw(10)setfill(0)3.1415endl; coutsetw(10)setfill(0)setiosflags(ios:left)3.1415endl; coutsetw(10)setfill(-)setiosf
14、lags(ios:right)3.1415endl;,1.3.3 类型增强,1.const类型 在C+中使用const修饰的变量是一个常量,与C语言相比,C+中的const常量无法通过指针间接修改。,const int a = 10; /类型不兼容错误 int *p = ,1.3.3 类型增强,2.逻辑类型bool C语言中没有逻辑类型,只能用非0表示真,用0来表示假。而C+中有bool 类型,使用true关键字表示真,false关键字表示假。,/bool类型变量定义 bool a = false; bool b = true; /判断两个数的大小 bool greater(int x, in
15、t y)return x y;,1.3.3 类型增强,3.枚举类型enum C语言中枚举类型只能是整数类型,且枚举变量可以用任意整数赋值,使用自由灵活。在C+中,枚举变量只能使用枚举出来的元素进行赋值。,enumtemperatureWARM,COOL,HOT; enumtemperaturet=WARM; t=10;,1.3.4 默认参数,C+支持默认参数,即在定义或声明函数时给形参一个初始值,在调用函数时,如果不传递实参就使用默认参数值。,/例1-3 defaultPara.cpp void add(int x,int y=1,int z=2) coutx+y+zendl; int mai
16、n() add(1); add(1,2); add(1,2,3); return 0; ,1.3.4 默认参数,在使用默认参数时需要注意以下规则: (1)默认参数只可在函数声明中出现一次,如果没有函数声明,只有函数定义,才可以在函数定义中设定。 (2)默认参数赋值的顺序是自右向左,即如果一个参数设定了默认参数,则其右边不能存在未赋值的形参。 (3)默认参数调用时,遵循参数调用顺序,即有参数传入它会先从左向右依次匹配。 (4)默认参数值可以是全局变量、全局常量,甚至可以是一个函数。,1.3.5 函数重载,重载(overload)函数就是在同一个作用域内几个函数名字相同但形参列表不同。,/例1-4
17、 overloadFunc.cpp void add(int x, int y) cout int: x + y endl; void add(float x) cout float: 10 + x endl; double add(double x, double y) return x + y; int main() add(10.2); /一个实型参数 add(1, 3); /两个整型参数 return 0;,1.3.5 函数重载,当重载函数中的形参都是普通形参,定义和调用不会出现问题,当重载函数有默认参数值时,需要注意参数传递的问题。,注 意,1.3.5 函数重载,当使用具有默认参数的
18、函数重载形式时,须注意防止调用的二义性,例如,下面的两个函数: int add(int x, int y = 1); void add(int x); 当调用add()函数时,如果只有一个参数就会产生歧义,编译器无法确认调用哪一个函数,这就产生了调用的二义性。在使用时要杜绝一个函数既有默认参数又是重载函数,避免二义性的发生。,1.3.6 引用,引用是C+引入的新语言特性,它是某一变量的别名,C+引入引用的目的是简化指针的使用,灵活的使用引用可以使程序简洁高效。,1.3.6 引用,引用就是给一个变量起一个别名,用“ 上述格式中,“ int ,1.3.6 引用,在定义引用时需要注意以下方面: 引用
19、在定义时必须初始化,且与变量类型保持一致。 引用在初始化时不能绑定常量值,如int void exchange(int ,int main() int a, b; cout a b; exchange(a, b); cout exchange: a b endl; return 0; ,1.3.6 引用,如果想使用常量值初始化引用,则引用必须用const来修饰,用const修饰的引用称为const引用,也称为常引用。 const int ,1.3.6 引用,常变量的引用必须是const引用,但const引用不是必须使用常量或常变量进行初始化,const引用可以使用普通变量进行初始化,使用普通变
20、量初始化const引用,只是不允许通过该引用修改变量的值。 int a = 10;/变量a const int /错误,1.3.6 引用,引用作函数参数时,也可以使用const修饰,表示不能在函数内部修改参数的值。 bool isLonger(const string ,1.3.7 字符串类,C语言没有字符串这一数据类型,都是用字符数组处理字符串,C+支持C风格的字符串,还提供了一种自定义数据类型string,用于表示字符串,string是定义在头文件string中的类,使用前需要包含头文件string。 使用string类型定义字符串,不必担心字符串长度、内存不足等情况,而且string类重
21、载的运算符和成员函数足以完成字符串的处理操作。,1.3.7 字符串类,String定义字符串方式: string s1; s1=hello C+;/第一种方式 string s2=hello C+;/第二种方式 string s3(hello C+);/第三种方式 string s4(6,a);/第四种方式,1.3.7 字符串类,1.访问字符串中的字符 string类重载了“”操作符,可以用索引访问和操作字符串中指定位置的字符。 string s=hello,C+; s7=P; s8=P;,2.字符串连接 string重载了“+”运算符,可以使用“+”运算符连接两个string类型的字符串。
22、string s1,s2; s1=我在学习; s2=C+; couts1+s2endl;,1.3.7 字符串类,3.字符串比较 在C+中,可以直接调用重载后的、s1s2; if(s1s2) cout字符串s1大于s2endl; else if (s1s2) cout字符串s2大于s1endl; else cout字符串s1于s2相等endl;,1.3.7 字符串类,4.字符串长度计算 string类也提供了一些获取字符串长度的函数,length()函数函数,用于获取字符串长度。 string s = hello C+; coutlength():s.length()endl;,1.3.7 字符
23、串类,5.字符串交换 string类提供了成员函数swap(),用于交换两个字符串的值。 string s1=hello C+; string s2=I Love China!; s1.swap(s2); string的成员函数swap()只能交换string类型的 字符串,不能交换C语言风格的字符串。,1.3.8 new/delete,1.new new运算符用来申请一块连续的内存,其格式如下: new 数据类型(初始化列表); new在分配存储空间时指定了类型信息,并能根据初始化列表中给出的值进行初始化,new分配的内存空间直接可以使用,这个过程,称为new一个对象。new创建动态对象时不
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 教程 全书 课件 完整版 ppt 全套 教学 电子 教案 设计 最新
限制150内