深刻复制 2


  1. *Copyright(c)2016,烟台大学计算机与控制工程学院 
  2.  *All rights reserved 
  3.  *文件名称:123.cpp 
  4.  *作    者:隋宗涛
  5.  *完成日期:2016年5月10日 
  6.  *版 本 号:v1.0 
  7.  * 
  8.  *问题描述:阅读程序,增加复制构造函数 
  9.  *输入描述: 
  10.  *程序输出: 
  11. */  
  12. #include<iostream>  
  13. #include<cstring>  
  14. using namespace std;  
  15. class A  
  16. {  
  17. private:  
  18.     char *a;  
  19. public:  
  20.     A(char *aa)  
  21.     {  
  22.         a = new char[strlen(aa)+1];   //这样处理的意义在于可以不浪费内存空间,节省许多系统单元  
  23.         strcpy(a, aa);     //数据成员a与形式参数aa的关系是a与aa同为指针数组,系统分配的内存空间相同  
  24.     }  
  25.     A(A &b)  
  26.         {  
  27.             a=new char[strlen(b.a)+1];  
  28.             strcpy(a,b.a);  
  29.         }  
  30.     ~A()  
  31.     {  
  32.         delete []a;      //这样处理的意义在于可以释放指针所指向的内存空间,否则会导致动态分配的内存  
  33.     }                    //无法回收,使得程序所占的内存越来越大  
  34.     void output() { cout<<a<<endl; }  
  35. };  
  36. int main(){  
  37.     A a("good morning, code monkeys!");  
  38.     a.output();  
  39.     A b(a);  
  40.     b.output();  
  41.     return 0;  
  42. }  
  43. <pre name="code" class="cpp">/*
     *Copyright(c)2016,烟台大学计算机与控制工程学院
     *All rights reserved
     *文件名称:123.cpp
     *作    者:王蕊
     *完成日期:2016年4月24日
     *版 本 号: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与形式参数aa的关系是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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值