当前课程知识点:C++语言程序设计基础 >  第6章 数组、指针与字符串(一) >  导学 >  导学

返回《C++语言程序设计基础》慕课在线视频课程列表

导学在线视频

下一节:数组的定义与使用

返回《C++语言程序设计基础》慕课在线视频列表

导学课程教案、知识点、字幕

大家好

欢迎回来继续学习

C++语言程序设计

现在我们开始学习第六章

首先

由我和李超老师

将第六章的主要内容

给大家做一个简单的介绍

李老师

其实学生们

学完了前面的内容以后

好多同学有这样的疑问

说你的例题都这么小

然后里头就那么几个变量

如果我有大批量数据

需要处理呢

那程序里面

我起变量名也起不过来呀

我有几十个

几百个

几千个数据

那怎么办呢

其实这个时候

用数组是一个很好的办法

对吧

对啊

数组是一种构造的数据类型

然后这种数据类型

里面可以存放相同

或者是相似类型的数据

或者是对象

并且以顺序的方式来访问

这一类数据用数组来存储

是方法方便和合适的

这一章里头

我们就会给大家介绍数组

还有同学其实也问过我

就是郑老师在开始的时候说

C++是完全兼容C的

而C语言是用来写操作系统的

它可以直接访问

通过地址的方式来访问内存

很多同学很好奇

问我

什么时候能学到

这样的相关内容呢

其实用地址去访问内存

应该说是一个很底层的功能

由于C++

它能够用地址来访问内存空间

所以

我们反而会觉得有点担心

万一说我随便编一个整数

当地址去访问内存空间

那不是把内存里面

有可能有用的东西给破坏了吗

其实不是这样的

虽然C++可以允许我们

通过内存地址去访问内存空间

但是

这也是有规矩的

我们必须只能用

合法获得的地址去访问

允许我们程序访问的内存空间

怎么控制这一点呢

在这一章就会给大家介绍

指针呢

实际上就是一个

用来存放地址的

这样的数据类型

我们可以用它来存放数据的地址

还可以用它来存放

程序代码的地址

也就是说

存放函数的地址

所以我们可以通过地址

去访问数据

还可以用地址去调用函数

但是呢

大家还是会有这样的疑问

李老师 是不是这样

有同学会说

好好的

我函数有函数名

变量有变量名

我干吗非得用地址啊

好象还不那么好用

是吧

那你给大家介绍介绍

同学有这个疑问是很正常的

确实

指针不仅仅理解起来

要稍微费劲一点

而且指针使用起来

也会带来一些不安全的因素

所以我们大多数情况下

只要能不用指针

尽量不要用指针

可是有的时候

我们不得不必须要使用指针

那就是

比如说我们就将会学到的

动态内存分配

动态分配的内存

获得的返回值

只能是指针类型

这个时候你就不得不

使用指针来进行数据访问了

对 没有变量名

没有名字了

没有机会用名字访问

所以我们只能用指针来访问

所以呢

指针还是一个非常有用的类型

是的

我们还要是让大家理解这一点

把指针掌握好

是的

还有呢

就是说

我们用数组的时候

还是有

其实有点麻烦

对 有很多不方便之处

为什么

它要是越界怎么办

越界的意思是说什么

如果数组里面

我允许放十个数据

你放了十一个

放了十八个

那怎么办

非法了 越界了

对 没法访问内存空间了

然后就会引起一些

一些错误

莫名其妙的错误出来

那这个时候呢

实际上类库里面

给我们已经准备好了一个

更好用的

面向对象的数组

就是这个vector

那么vector的功能

李老师简单给大家介绍一下

vector确实非常强大

有了vector以后

你会感到

它是一个更智能化

更安全的面向对象类

方向对象的方式的一组数据

那么你可以灵活地

改变它的长度

这个时候

你只要在越界之前

把它的长度进行伸缩

就再也不用担心越界了

除此以外

它还有其他的一些

和传统数组类似的便捷之处

它可以直接通过下标去访问

等等的好处

到相关的章节你就会了解了

是的

然后 还有就是说

我们可以通过指针

去获取动态内存分配的

内存空间
这种地址

内存空间地址

那么这个时候呢

问题又来了

如果我在类的数据成员里面

定义某些成员它是指针

在运行的时候呢

当需要内存空间的时候

我们去做动态内存分配

然后把这个返回的地址

赋到成员变量指针里面去

同学们想想

这个时候

如果你要做复制构造

会发生什么问题呢

你想想

一个已有的对象

里面成员有一个是指针

这个指针指向某一个

在运行时动态申请的存储空间

那么用这样一个已有对象

去初始化新对象的时候

大家想

既然是复制

那肯定我又得要

这么一块存储空间

对吧

这个时候 李老师

浅层复制好象就做不到这一点了

对吧


在前面章节的时候

大家一直觉得

系统默认构造函数

不是就挺好用的吗

实际上一一对应的复制就可以了

那么在这一章里你会看到

这个时候是不可以的

就是这一章将会给大家介绍的

深拷贝

有了深拷贝以后呢

我们就可以能够真正地

把动态内存分配的地址

它指向的那些内存空间的内容

也全都给搬家搬过来

我们也在新对象中

同样申请这么一块内存空间

这就是深拷贝

也叫深层复制的

一个重要的应用场景

所以学完这一章以后

我们对第四章遗留的这个问题呢

我相信同学们

也会有更好的理解的

还有啊 李老师

这个字符串一直是很多同学

一个疑问

是的

大家觉得字符串常量很明白

但是字符串变量呢

好象一直都没有接触过

一般我们说有整型常量

那就有整型变量来存放它

有浮点常量

就有浮点变量来存放它

我们有双引号

里面的字符串

作为字符串的常量

但是没有字符串的变量

把它放哪儿

所以这一章里头呢

会给大家讲两种方法

第一种方法

是从C语言继承过来的传统方式

用字符数组来存储

和处理字符串

当然这种方法呢

还有很多不方便之处

对吧 郑老师

因为数组本身

它有它的缺陷

它有可能越界

然后尤其是用数组

来存放字符串的时候

那么还要末尾有一个0

作为结束标记

你要忘了这个0

它就不成为字符串了

所以推荐大家使用

类库里为我们准备好的

这个string类

李老师

你给大家说说string类是个什么

string类

是C++里头的非常好的一个类

它可以把字符串

用面向对象的方式进行处理

那么您可以方便地

进行字符串的比较

拼接等等等等

比用数组来存放字符这种方式

要方便的多

也安全的多

这一章里头

我们也会给大家介绍

好 那这个呢

就是这一章

我们俩要给大家介绍的主要内容

我会给大家介绍

这些基础语法基本概念

以及与这些基本概念相关的

验证性的这些例题

然后在这章的最后

要请李超老师

给大家介绍一个综合的实例

是的

在前面的章节里面

给大家介绍了一些

简单的实验和例题

但是如果我们要处理

大规模的这种应用问题呢

还需要更多的一些经验

我们通过前几章的学习呢

知道了基本的控制结构

然后

类和对象的基本概念和用法

然后加上这章

新学的这些内容呢

我们可以去完成更复杂的功能

我希望能够通过综合实例

让大家接触一些

稍稍长一些

稍稍复杂一些的问题

如何去解决

是的

从这章开始呢

我们内容的难度就增加了

是的

大家知道呢

我们学习程序设计

不是说学点语法

能够编点小例题习题就行了

你总归要做一点

略有规模的程序

要做点实用的程序

这个时候呢

能够观察学习一点

稍微规模大一点的

这种综合实例

对大家提高编程水平

是非常有好处的

这些就是我们这一章

要给大家介绍的内容

这些内容呢

大家听了我们前面介绍

是不是觉得很有意思

我和李超老师

会带着大家一起

学习这一章的内容

会给大家进行详细的讲解

希望大家能够开心

愉快地学习这一章的内容

C++语言程序设计基础课程列表:

第1章 绪论

-导学

--第1章导学

-计算机系统简介

--计算机系统简介

--计算机系统简介 测试题

-计算机语言和程序设计方法的发展

--计算机语言和程序设计方法的发展

--计算机语言和程序设计方法的发展 测试题

-面向对象的基本概念

--面向对象的基本概念

--面向对象的基本概念 测试题

-程序的开发过程

--程序的开发过程

--程序的开发过程 测试题

-信息的表示和储存

--计算机中的信息与存储单位

--计算机的数字系统

--数据的编码表示

--信息的表示和储存 测试题

-实验指导

--实验一:VS开发环境介绍

第2章 C++简单程序设计(一)

-导学

--第二章导学

-C++语言概述

--C++的特点和程序实例

--C++字符集和词法记号

--C++语言概述 测试题

-基本数据类型、常量、变量

--基本数据类型、常量、变量

--程序举例

--基本数据类型、常量、变量 测试题

-运算与表达式

--算术运算与赋值运算

--逗号运算、关系运算、逻辑运算和条件运算

--Sizeof运算、位运算

--运算优先级、类型转换

--运算与表达式 测试题

-实验二:简单程序设计(上)

--实验二:简单程序设计(上)

第2章 C++简单程序设计(二)

-数据的输入和输出

--数据的输入和输出

--数据的输入和输出 测试题

-选择结构

--if语句

--switch语句

--选择结构 测试题

-循环结构

--循环结构——while语句

--do-while语句

--for语句

--嵌套的控制结构、其他控制语句

--循环结构 测试题

-自定义类型

--自定义类型

--自定义类型

-第2章小结

--第二章小结

-实验二:C++简单程序设计(下)

--实验二C++简单程序设计(下)

第3章 函数

-导学

--导学

-函数定义

--函数定义

--函数定义 测试题

-函数调用

--函数调用(例3-1)

--例3-2

--例3-3

--例3-4

--例3-5

--例3-6

--函数调用 测试题

-嵌套与递归

--函数的嵌套调用(例3-7)

--函数的递归调用(例3-8)

--例3-9

--例3-10

--嵌套与递归 测试题

-函数的参数传递

--函数的参数传递

--函数的参数传递 测试题

-引用类型

--引用类型(例3-11)

--引用类型 测试题

-含有可变参数的函数

--含有可变参数的函数

--含有可变参数的函数 测试题

-内联函数

--内联函数(例3-14)

--内联函数 测试题

-constexpr函数

--constexpr函数

--CONSTEXPR函数课后习题

-带默认参数值的函数

--带默认参数值的函数

--默认参数值例(3-15)

--带默认参数值的函数 测试题

-函数重载

--函数重载(例3-16)

--函数重载 测试题

-C++系统函数

--C++系统函数(例3-17)

--C++系统函数习题

-第3章小结

--第三章小结

-实验三(上)函数的应用

--实验三(上)函数的应用

-实验三(下)函数的应用

--实验三(下)函数的应用

第4章 类与对象

-导学

--导学

-面向对象程序的基本特点

--面向对象程序的基本特点

--面向对象程序的基本特点 测试题

-类和对象

--类和对象的定义

--类和对象的程序举例

--类和对象 测试题

-构造函数

--构造函数基本概念

--构造函数例题(1)——例4-1

--构造函数例题(2)——例4-2

--委托构造函数

--复制构造函数

--复制构造函数调用举例

--构造函数 测试题

-析构函数

--析构函数

--析构函数 测试题

-类的组合

--类的组合

--类的组合程序举例

--前向引用声明

--类的组合 测试题

-UML简介

--UML简介

--UML简介课后习题

-结构体与联合体

--结构体(例4-7)

--联合体(例4-8)

--结构体与联合体 测试题

-枚举类

--枚举类

--枚举类 测试题

-第4章小结

--第四章小结

-实验四(上)

--实验四(上)

-实验四(下)

--实验四(下)

第5章 数据的共享与保护

-导学

--导学

-标识符的作用域与可见性

--标识符的作用域与可见性

--标识符的作用域与可见性 测试题

-对象的生存期

--对象的生存期

--对象的生存期 测试题

-类的静态成员

--静态数据成员(例5-4)

--静态函数成员(例5-5)

--类的静态成员 测试题

-类的友元

--类的友元(例5-6)

--类的友元 测试题

-共享数据的保护

--共享数据的保护(例5-7)

--共享数据的保护 测试题

-多文件结构和预编译命令

--多文件结构和预编译命令(例5-10)

--多文件结构和预编译命令 测试题

-第5章小结

--小结

-实验五

--实验五

第6章 数组、指针与字符串(一)

-导学

--导学

-数组的定义与初始化

--数组的定义与使用

--数组的储存与初始化

--一维数组应用举例

--数组的定义与初始化 测试题

-数组作为函数的参数

--数组作为函数参数(例6-2)

--数组作为函数的参数 测试题

-对象数组

--对象数组

--对象数组 测试题

-基于范围的for循环

--基于范围的for循环

-指针的定义和运算

--指针的概念、定义和指针运算

--指针的初始化和赋值

--指针的算术运算、关系运算

--指针的定义和运算 测试题

-综合实例

--综合实例

-实验六(上)

--实验六上

第6章 数组、指针与字符串(二)

-指针与数组

--用指针访问数组元素

--指针数组

--指针与数组 测试题

-指针与函数

--以指针作为函数参数

--指针类型的函数

--指向函数的指针

--指针与函数 测试题

-对象指针

--对象指针

--对象指针 测试题

-动态内存分配

--动态分配与释放内存

--申请和释放动态数组(一)

--申请和释放动态数组(二)

--动态内存分配 测试题

-智能指针

--智能指针

-vector对象

--vector对象

--vector对象 测试题

-对象复制与移动

--深层复制与浅层复制

--移动构造

--对象复制与移动 测试题

-字符串

--C风格字符串

--string类

--字符串 测试题

-第6章小结

--第六章小结

-综合实例

--综合实例

-实验六(下)

--实验六(下)

导学笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。