第九周项目2:深复制体验(2)
来源:互联网 发布:ecmall微信商城源码 编辑:程序博客网 时间:2024/05/22 01:37
问题及代码:
/*Copyright (c)2016,烟台大学计算机与控制工程学院*All rights reserved.*文件名称:main.cpp*作 者:崔青青*完成日期:2016年4月22日*版 本 号:v1.0*问题描述:阅读下面的程序,将注释(a)所在的那一行去掉,会出现什么样的现象,为什么,为什么a的数据成员所占用的存储空间要在*aa长度上加一,若指针不是指向字符(即不作为字符串的地址),是否有必要加一。*输入描述:*输出描述:*/#include <iostream>#include<cstring>using namespace std;class A{ private: char *a; public: A(char *aa) { a=new char[strlen(aa)+1];//(a)这样处理的意义在于:(分配内存空间,将它的首地址赋给a,a避免成为野指针) strcpy(a,aa);//(b)数据成员a与形式参数aa的关系:(a数组里的内容是由aa复制来的) } ~A() { delete []a;//(c)这样处理的意义在于:(程序处理完之后,释放内存,不占用内存空间) } void output(){cout<<a<<endl;}};int main(){ A a("good morning,code monkeys!"); a.output(); A b("good afternoon,codes!"); b.output(); return 0;}
运行结果:
知识点总结:
答案:若去掉,那么程序极有可能出错,因为a将会成为野指针。在aa长度的基础上加一是因为字符串的结束符并没有算在字符串的长度里,
但是开辟空间的时候得加上。若a指向的不是字符串,那么没有必要加一。
学习心得:
这些都是零碎的知识点,但是要熟练掌握,因为这些地方是极有可能出错的。
0 0
- 第九周 【项目-深复制体验】2
- 第九周项目2-深复制体验
- 第九周项目2:深复制体验(2)
- 第九周项目2深复制体验(2)
- 第九周项目2-深复制体验(2)
- 第九周项目2:深复制体验(1)
- 第九周项目2:深复制体验(3)
- 第九周项目1 深复制体验(2)
- 第九周项目1-深复制体验(2)
- 第九周项目1—深复制体验(2)
- 第九周项目一-深体验复制(2)
- 第九周项目1-深复制体验(2)
- 第九周项目2深复制体验(1)
- 第九周项目一深复制体验(2)
- 第九周项目2深复制体验(3)
- 第九周项目1—深复制体验(2)
- 第九周项目1—深复制体验(2)
- 第九周项目一(2)-深复制体验
- 李白打酒
- Opera安装详解
- Java抽象类与接口的区别
- 某公司笔试题
- 【NOIP2015模拟10.22】最小代价
- 第九周项目2:深复制体验(2)
- 设计模式之行为类模式
- adroid线程池的运用
- 匈牙利算法详解
- 奇怪的电梯
- sublime text编辑器html页面预览
- RBAC权限
- POJ 2488 A Knight's Journey
- 程序上传