第九周实践项目1.2-深复制体验

/*
 *Copyright(c)2016,烟台大学计算机与控制工程学院
 *All right reserved.
 *文件名称:77.cpp
 *作    者:董凯琦
 *完成日期:2016年4月28日
 *版 本 号:v1.0
 *
 *问题描述:为类A增加复制构造函数。
 *程序输入:

 *程序输出:字符串



 */


#include <iostream>
#include <cstring>
using namespace std;
class A
{
private:
    char *a;
public:
    A(char *aa)
    {
        a=new char[strlen(aa)+1];//(a)这样处理的意义在于:为字符串开辟一段地址来储存字符串
        strcpy(a,aa);//数据成员a与形式参数aa的关系:公用一块内存
    }
    ~A()
    {
        delete[]a;//这样处理的意义在于:释放为a开辟的空间
    }

     A(A &s)
    {
        a = new char[strlen(s.a)+1];
        strcpy(a,s.a);
    }

    void output(){cout<<a<<endl;}
};
int main()
{
    A a("good morning,code monkeys!");
    a.output();
    A b(a);
    b.output();
    return 0;
}


运行结果:

 

第九周实践项目1.2-深复制体验_第1张图片

知识点总结:

从这个程序中,我们进一步了解到了如何进行深复制。即为指针开辟一段存储的空间,不要让它成为“霸道的”野指针,如果对于字符串而言,必须在所在长度上加一。此外,在为类A书写构造函数的时候应该注意,同样要为所需复制构造的函数开辟一段存储空间。

学习心得:

深复制构造函数与普通构造函数类似,不要忘记在.前输入复制对象的名称。即:a=new char[strlen(s.a)+1]。

你可能感兴趣的:(第九周实践项目1.2-深复制体验)