第6周项目1.1深复制

来源:互联网 发布:2015年老龄化数据 编辑:程序博客网 时间:2024/05/21 14:52

/*

 *Copyright (c) 2015,烟台大学计算机学院

 *All rights reserved.

 *文件名称:.cpp

 *作者:孙旭明

 *完成时间:2015年4月15号

 *版本号: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)这样处理的意义在于: 定义一个动态数组,以便节约空间
        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?
(3)为类A增加复制构造函数,用下面的main函数测试

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. int main()  
  2. {  
  3.     A a("good morning, code monkeys!");  
  4.     a.output();  
  5.     A b(a);  
  6.     b.output();  
  7.     return 0;  
  8. }

 

 

#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);  //(b)数据成员a与形式参数aa的关系:将aa赋值于a

    }
    A(A &b)
    {
        a = new char[strlen(b.a)+1];
        strcpy(a,b.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;
}

 

 

深复制,指针,字符串,数组,析构函数,

0 0