- 1、本文档共128页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * const_cast的安全使用(2) 新问题的解决 修改原先的element函数: Point element(int index) { return const_castPoint ( static_castconst ArrayOfPoints *(this) -element(index)); } 执行过程:调用常成员函数element(),再将其返回结果中的const用const_cast去除 将this用static_cast转换为常指针,是安全的转换 该函数本身不是常成员函数,确保将最终的结果以普通引用形式返回是安全的 思考:如果保留该函数,而修改常成员函数element,使常成员函数element调用该函数,是否合适? * 深度探索 * 小结与复习建议 主要内容 数组、指针、动态存储分配、指针与数组、指针与函数、字符串 达到的目标 理解数组、指针的概念,掌握定义和使用方法,掌握动态存储分配技术,会使用string类。 实验任务 实验六 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * for (int i = 0; i 8; i++) { for (int j = 0; j 9; j++) { for (int k = 0; k 8; k++) //将指针cp作为数组名使用,通过数组名和下标访问数组元素 cout cp[i][j][k] ; cout endl; } cout endl; } delete[] cp; return 0; } * 用vector创建动态数组 为什么需要vector? 将动态数组封装,自动创建和删除 数组下标越界检查 例6-18中封装的ArrayOfPoints也提供了类似功能,但只适用于一种类型的数组 vector动态数组对象的定义 vector元素类型 数组对象名(数组长度); 例:vectorint arr(5)建立大小为5的int数组 * vector动态数组对象 vector数组对象的使用 对数组元素的引用 与普通数组具有相同形式: 数组对象名 [ 下标表达式 ] 但vector数组对象名不表示数组首地址 获得数组长度 用size函数 数组对象名.size() * vector动态数组对象 例6-20 vector应用举例 #include iostream #include vector using namespace std; //计算数组arr中元素的平均值 double average(const vectordouble arr) { double sum = 0; for (unsigned i = 0; i arr.size(); i++) sum += arr[i]; return sum / arr.size(); } * vector动态数组对象 int main() { unsigned n; cout n = ; cin n; vectordouble arr(n); //创建数组对象 cout Please input n real numbers: endl; for (unsigned i = 0; i n; i++) cin arr[i]; cout Average = average(arr) endl; return 0; } * * 浅拷贝与深拷贝 浅拷贝 实现对象间数据元素的一一对应复制。 深拷贝 当被复制的对象数据成员是指针类型时,不是复制该指针成员本身,而是将指针所指的对象进行复制。 浅拷贝与深拷贝 * 例6-21对象的浅拷贝 #include iostream #include cassert using namespace std; class Point { //类的声明同例6-16 //…… }; class ArrayOfPoints { //类的声明同例6-18 //…… }; 浅拷贝与深拷贝 int main() { int count; cout Please enter the count of points: ; cin count;
文档评论(0)