您的位置:首页 > 编程语言 > C语言/C++

C++第7周(春)项目1 深复制体验

2014-04-08 16:12 225 查看
课程首页在:/article/1353314.html,内有完整教学方案及资源链接

【项目1-深复制体验】
1、阅读下面的程序,补足未完成的注释
#include<iostream>  
#include<cstring>  
using namespace std;  
class A  
{  
private:  
    char *a;  
public:  
    A(char *aa)  
    {  
        a = new char[strlen(aa)+1];  //(1)这样处理的意义在于:______________________________  
        strcpy(a,aa);  //(2)数据成员a与形式参数aa的关系:___________________________________  
    }  
    ~A()  
    {  
        delete []a;   //(3)这样处理的意义在于:  ___________________________________________  
    }  
    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、将注释(1)所在的那一行去掉,会出现什么现象?为什么?为什么a数据成员所占用的存储空间要在aa长度基础上加1?
3、为类A增加复制构造函数,用下面的main函数测试
int main(){  
    A a("good morning, code monkeys!");  
    a.output();  
    A b(a);  
    b.output();  
    return 0;  
}

参考解答(第3部分)
#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;
}


==================== 迂者 贺利坚 CSDN博客专栏=================
|== IT学子成长指导专栏 专栏文章的分类目录(不定期更新) ==|
|== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==|
|== 我写的书——《逆袭大学——传给IT学子的正能量》    ==|
===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: