第六周上机项目1 深复制体验

来源:互联网 发布:st6015塔吊相关数据? 编辑:程序博客网 时间:2024/06/01 07:42

阅读下面的程序,补足未完成的注释

#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的关系:__数据成员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;  }  

(2)将注释(a)所在的那一行去掉,会出现什么现象?程序运行错误。为什么?为什么a数据成员所占用的存储空间要在aa长度基础上加1?还有'\0'.若指针a不是指向字符(即不作为字符串的地址),是否有必要加1?meiyou
(3)为类A增加复制构造函数,用下面的main函数测试
[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
int main()  
{  
    A a("good morning, code monkeys!");  
    a.output();  
    A b(a);  
    b.output();  
    return 0;  
}  
/** Copyright (c) 2015,烟台大学计算机学院* All right reserved.* 作者:曹莉萍* 文件:Demo.cpp* 完成时间:2015年04月19日* 版本号:v1.0*/#include<iostream>  #include<cstring>  using namespace std;  class A  {  private:      char *a;  public:      A(char *aa)      {          a = new char[strlen(aa)+1];          strcpy(a,aa);      }      A(A &b)      {          a = new char[strlen(b.a)+1];          strcpy(a,b.a);      }      ~A()      {          delete []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
原创粉丝点击