c++基础教案.ppt

上传人:资****亨 文档编号:127757043 上传时间:2020-04-05 格式:PPT 页数:140 大小:262.50KB
返回 下载 相关 举报
c++基础教案.ppt_第1页
第1页 / 共140页
c++基础教案.ppt_第2页
第2页 / 共140页
c++基础教案.ppt_第3页
第3页 / 共140页
c++基础教案.ppt_第4页
第4页 / 共140页
c++基础教案.ppt_第5页
第5页 / 共140页
点击查看更多>>
资源描述

《c++基础教案.ppt》由会员分享,可在线阅读,更多相关《c++基础教案.ppt(140页珍藏版)》请在金锄头文库上搜索。

1、1 目录 第一节c 概述第二节函数第三节类和对象第四节友元和重载第五节模板第六节继承 2 第一节c 概述 main 函数标准输入输出流exit语句数据类型标准库string类型引用类型指针和const限定符动态内存分配 3 1 1main 函数 intmain return0 每个c 程序必须含有main 函数 且main函数是唯一被操作系统显式调用的函数定义函数必须制定4个元素 返回类型 函数名 形参表 函数体 操作系统通过main的返回值来确定程序是否成功执行完毕 返回0表示程序成功执行完毕 通常非0表示有错误出现 4 1 2标准输入输出流 C 没有直接定义进行输入 输出的任何语句 这个功

2、能由标准库iostream h提供 包含两个类 输入流istream和输出流ostream includeusingnamespacestd 标准库中的四个IO对象cin标准输入 如键盘 为istream对象cout标准输出 如显示屏 为ostream对象cerr标准错误 用于输出警告和错误信息 为ostream对象clog用于产生程序执行的一般信息 为ostream对象 5 cin读入流 由键盘输入 作用从键盘取得数据送至内存 与 一起使用结合方向为自左向右例如 intv1 v2 cin v1 v2 从流中读取信息时 输入流缓冲指针跟踪最后一个读入到流的字符 每次尝试从流获取信息时 都从指针

3、的当前位置开始cin自动跳过空白字符 whitespace 返回值为左操作数 6 用cout写入到流 输出到屏幕 cout必须与输出操作符 一起使用 结合方向为自左向右例如 cout Entertwonumbers endl cout dec x hex oct 作用将右操作数插入到cout中 可同时接受不同类型的数据输出 所以可有多个 操作符 把信息写入流时 把信息添加到流的末尾 相当于从左到右输出endl endofline 为操纵符 具有换行效果 并刷新与设备相关联的缓冲区 刷新后用户可立即看到写入到流中的输出 注 忘记刷新可能会造成输出停留在缓冲区 建议在程序员调试过程中 这些语句都应

4、刷新输出流iomanip h中 setw n 为后面的输出项预留n列 7 1 3exit 语句 形式 exit interger value 执行exit语句时 程序立即终止 一般来说 如果因为一个错误而调用exit 就使用1 其他情况使用0 该函数在头文件cstdlib中 所有要有预编译命令 includeusingnamespacestd 8 1 4内置数据类型 常量宏常量 definePI3 1415926系统不为其分配内存 只是简单的字符串替换const常量 const类型常量标识符 值 常量定义后不能修改 所以必须初始化例如 constdoublePI 3 1415926 系统为PI

5、分配内存单元两种常量的比较const常量有数据类型 而宏常量没有数据类型 编译器可以对const常量进行类型合法性检查 而对宏常量仅仅是字符的替换 没有合法性检查 并且在字符替换的时候可能产生意想不到的错误c 中 const常量完全可以取代宏常量 9 布尔类型bool 它的值只有两个true和false可以将算术类型的任何值赋给bool对象 0代表false非0代表true初始化 创建对象并给它赋初值 赋值指擦除对象的当前值并用新值代替 有两种形式 复制初始化 用等号intval 1024 直接初始化 初始化式放在括号中intval 1024 通常在一个对象首次使用的地方定义该对象 10 1

6、5标准库string类型 includeusingnamespacestd string对象的定义和初始化strings2 s1 s1为string对象或字符串字面值strings3 n c s3为n个c注意 字符串字面值和标准库string类型不是同一类型string对象的读写输入 cin s 从第一个非空字符读至下一个空白字符读入一行getline cin line 两个参数 输入流对象和string对象功能 从输入流的中读取内容到line中 换行符是该行的结束标志注 getline 不忽略开头的换行符 但line并不保存换行符 即若开头遇换行符 line为空string输出 cout s

7、 endl 11 include includeusingnamespacestd intmain intargc char argv stringstr cout str 输入str的时候 只要遇到了空格 就会结束输入cout str 输入了一次回车 这个语句遇到回车就结束 这样 回车符也跟着到了内存 到用getline 再输入时 内存里第一个字符就是回车 所以getline 一读到这个回车就结束了 所以getline cin str 不起作用 解决 处理掉cin str 遗留的回车符 可以在该语句下加一句 getchar 吸收内存里的回车符 12 string对象的操作s empty 若字

8、符串为空 返回trues size 返回s中字符的个数s n 返回s中位置为n的字符s1 s2 比较 所有的比较运算符都可以使用s1 s2 连接s1 s2 赋值 string类型可以和字符串字面值连接 赋给string类型 但是 操作符的左右操作数必须至少有一个string类型strings hello s1 13 1 6引用类型 引用就是对象的另一个名字 主要用于函数的形参引入voidsa intb inttemp a a b b temp intmain intx 10 y 20 s 形参与实参有各自不同的内存空间 若实参是一个复杂对象 重新分配内存会引起程序执行效率大大下降形参对实参为值

9、传递 对形参的任何改变不会引起实参值的改变 14 1 6 1非const引用 引用就是某一变量 目标 的一个别名 对引用的操作与对变量直接操作完全一样 声明 类型标识符 定义引用ra 它是变量a的引用 别名 1 在此不是求地址运算 而是起标识作用 2 声明引用时 必须同时对其进行初始化 3 引用声明完毕后 相当于目标变量名有两个名称 不能再把该引用名作为其他变量名的别名 4 声明一个引用 不是新定义了一个变量 它只表示该引用名是目标变量名的一个别名 它本身不是一种数据类型 因此引用本身不占存储单元 故 对引用求地址 就是对目标变量求地址 ra与 a相等 15 非const引用 intival

10、1024 1 引用必须在定义时初始化 int 16 1 6 2const引用 格式 const类型标识符 正确引用型参数应该在能被定义为const的情况下 尽量定义为const 17 对const对象的引用 constintival 1024 inti 34 constintrefval是对const型的引用 所以任何对refval的赋值都是非法const对象必须用const引用const引用可以绑定到相关的类型的对象 或绑定到右值 18 1 6 3指针和引用的比较 指针和引用都可间接访问另一个值 但是1 引用总是指向某个对象 定义时必须初始化 指针则可以在任何时候被初始化2 引用一旦被初始化

11、 就不能改变引用的关系而指针则可以随时改变所指向的对象3 赋值 引用即为别名 给引用赋值修改的是该引用所关联的对象的值 非const引用 而指针可以更改其指向的对象 也可以更改所指向的对象的值4 不能有NULL引用 引用必须与合法的存储单元关联 而指针则可以是NULL 19 1 7指针和const限定符 使用const修饰指针时 由于const的位置不同 而含意不同 1 7 1指向const对象的指针指向const的指针 不可以通过该指针修改对象 但可以其他方式修改doubledval 3 14 pi 3 1415 constdouble ptr 合法 20 若一个指针是指向const对象 则

12、该指针必须具有const特性 例如constdoublepi 3 14159 constdouble ptr 错误 const对象要用指向const的指针来指向 这样可以保证既不能通过 ptr 也不能通过pi修改其值指向const的指针常用作函数的形参 这样可以确保函数的实参在函数调用过程中不被修改voiduse ptr constint p 21 1 7 2const指针 固定指向一个对象的指针 即指针本身是常量char constptr1 stringptr1 const放在类型说明和变量之间ptr1 stringptr2 非法 指针本身的值不可改变 ptr1 m 合法指针所指的变量的值可

13、以改变若指针及指针所指向的变量的值都不可以更改constchar constptr stringptr 22 1 8动态内存分配 一内存分配有三种方式从静态存储区域分配 内存在程序编译的时候就已经分配好 这块内存在程序的整个运行期间都存在 例如全局变量 static变量 栈 就是那些由编译器在需要的时候分配 在不需要的时候自动清除的变量的存储区 里面的变量通常是局部变量 函数参数等 栈内存分配运算内置于处理器的指令集中 效率很高 但是分配的内存容量有限 堆 亦称动态内存分配 程序在运行的时候用malloc或new申请任意多少的内存 程序员自己负责在何时用free或delete释放内存 动态内存

14、的生存期由我们决定如果程序员没有释放掉 那么在程序结束后 操作系统会自动回收 23 1 8 2单个对象的动态分配与释放 动态分配 由关键字new及其后面的类型指示符构成 该类型指示符可以是内置类型或class类型 例 newint 从堆中分配了一个int型的对象 newStudent 分配了一个Student类对象 需要注意的是堆中分配的对象没有名字 new表达式返回了一个指向该对象的指针 对该对象的全部操作都要通过这个指针间接完成 例如 int pi newint 该new表达式创建了一个int型的对象 由pi指向它 初始化int pi newint 0 该语句表示pi指向一个int型的对象

15、 该对象的初始值为0 括号中的表达式被称作初始化式 24 动态内存的释放 与静态分配内存的对象不同 编译器不会自动释放它们所占的内存 除非整个程序结束 所以当动态分配内存的对象完成它的使命 需要被销毁的时候不能依赖编译器 而要靠程序员用delete释放 格式 deletepi 释放pi所指向的内存空间指针pi本身是个在全局域中声明的全局对象 它的生命期由编译器控制 pi的存储区在程序开始之前就被分配 一直保持到程序结束 而pi指向的对象的生命期是由程序员控制的 它是在程序执行过程中遇到new表达式时才被创建 遇到delete表达式时被销毁并收回存储区 25 动态内存的释放 delete只能用在

16、指向内存是用new动态分配的指针上 如果将其在指向堆以外内存的指针上 会使程序运行期间出现未定义的行为 唯一的例外是 当指针指向NULL时 不管指针指向的对象是如何分配内存的 都不会引发麻烦 voidf inti char str asdd int pi 安全 pd指向一个动态分配的对象 26 常见错误 1 忘记了释放内存 造成内存泄露 含有这种错误的函数每被调用一次就丢失一块内存 刚开始时系统的内存充足 你看不到错误 终有一次程序突然死掉 系统出现提示 内存泄漏 memoryleak 函数体内的局部变量在函数结束时自动消亡 例如p是局部的指针变量 它消亡的时候会让它所指的动态内存一起消亡 这是错觉 voidFunc void char p char malloc 100 动态内存会自动释放吗 指针消亡了 并不表示它所指的内存会被自动释放2 对同一内存区应用了多次delete表达式 这通常发生在多个指针指向同一个动态分配对象的时候 若多个指针指向同一对象 当通过某一个指针释放该对象时就会发生这种情况 3 内存被释放了 并不表示指针会消亡或者成了NULL指针 形成野指针 27 野指针 因

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

当前位置:首页 > 高等教育 > 大学课件

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