第九周项目1——深复制体验

来源:互联网 发布:如何申请成为淘宝达人 编辑:程序博客网 时间:2024/05/16 05:17

问题(2)及代码:

/* * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:main.cpp * 作    者:赵志君 * 完成日期:2016年4月28日 * 版 本 号:v1.0 * * 问题描述:(1)阅读下面的程序,补足未完成的注释 */#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指针指向的安全,同时保证a的长度的合理。        strcpy(a, aa);  //(b)数据成员a与形式参数aa的关系:把aa指向的字符串首地址,传递给a。    }    ~A()    {        delete []a;   //(c)这样处理的意义在于: 释放掉为a分配的空间。    }    void output()    {        cout<<a<<endl;    }};int main(){    A a("good morning, code monkeys!");    a.output();    A b("good afternoon, codes!");    b.output();    return 0;}

问题(2)将注释(a)所在的那一行去掉,会出现什么现象?为什么?为什么a数据成员所占用的存储空间要在aa长度基础上加1?若指针a不是指向字符(即不作为字符串的地址),是否有必要加1?

答:去掉后则没有给a分配相应的空间,a的长度可能不足够储存aa所指向的字符串。

    因为字符串后边会有一个结束符,而aa的长度只包含字符串的长度。

    同样需要。


问题(3)及代码:

/* * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:main.cpp * 作    者:赵志君 * 完成日期:2016年4月28日 * 版 本 号:v1.0 * * 问题描述:(3)为类A增加复制构造函数,用下面的main函数测试 */#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指针指向的安全,同时保证a的长度的合理。        strcpy(a, aa);  //(b)数据成员a与形式参数aa的关系:把aa指向的字符串首地址,传递给a。    }    A(const A &t)    {        a = new char[strlen(t.a)+1];        strcpy(a,t.a);    }    ~A()    {        delete []a;   //(c)这样处理的意义在于: 释放掉为a分配的空间。    }    void output()    {        cout<<a<<endl;    }};int main(){    A a("good morning, code monkeys!");    a.output();    A b(a);    b.output();    return 0;}

运行结果:



学习心得:在写注释是,一些明白的东西却不能去用语言表达出来,应该需要把书上的概念记清楚。

0 0
原创粉丝点击