第六周项目一 (1)(2) 深复制体验

来源:互联网 发布:js 基础类型 编辑:程序博客网 时间:2024/06/01 07:33
问题及代码:
/** Copyright (c) 2014, 烟台大学计算机学院* All rights reserved.* 文件名称:test.cpp* 作    者:宋健* 完成日期:2015年 4月 14日* 版 本 号:v1.0** 问题描述: 体验深复制* 程序输入:* 程序输出:*/#include<iostream>#include<cstring>using namespace std;class A{private:    char *a;public:    A(char *aa)    {        a = new char[strlen(aa)+1];  //(a)这样处理的意义在于:开辟一个比aa指针指向的空间长度多1的空间,为了储存最后的'\0',并且将a指针赋值为这个新空间的地址______________________________        strcpy(a, aa);  //(b)数据成员a与形式参数aa的关系:将形式参数aa指向的空间的内容复制给a指向的空间___________________________________    }    ~A()    {        delete []a;   //(c)这样处理的意义在于:  将用new建立的空间释放,提高运行效率___________________________________________    }    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)所在的那一行去掉,程序会出现错误无法运行,因为去掉后即没有对指针a赋初值,a为野指针,因为a的数据成员为字符型,需要在内容后加入多加一个'\0'字符,所以字符长度要+1,如果不是字符串,不必+1

0 0
原创粉丝点击