zoukankan      html  css  js  c++  java
  • 第六周项目1-深复制体验

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

    #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()
        {
            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;
    }

    (2)将注释(a)所在的那一行去掉,会出现什么现象?程序运行错误 

    为什么a数据成员所占用的存储空间要在aa长度基础上加1?还有结束字符'' 

    若指针a不是指向字符(即不作为字符串的地址),是否有必要加1?没有

    (3)为类A增加复制构造函数,用下面的main函数测试

    #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;
    }


    @ Mayuko

  • 相关阅读:
    tcp示例
    udp示例
    str 和 bytes
    Xamarin UIProgressView自定义
    个人用Canvas开发HTML5小游戏
    canvas画一个h5小游戏
    用canvas写一个h5小游戏
    react js踩坑之路(一)
    捣腾一下 webpack+gulp 使用姿势~
    关于移动端的适配
  • 原文地址:https://www.cnblogs.com/mayuko/p/4567511.html
Copyright © 2011-2022 走看看