C++浅层与深层复制构造函数
2014-03-14 22:16
197 查看
//浅层复制构造函数代码
执行结果:
深层复制构造函数代码
执行结果:
复制构造函数调用的条件有以下几个:
1用类的一个对象初始化该类的另一个对象时
2 如果函数的形参是类的对象,调用函数时,进行形参和实参结合时.
3 如果函数的返回值是类的对象,函数执行完成返回调用者时.
4需要产生一个临时类对象时。
#include<iostream> using namespace std; class Test { public: Test() { x=new int; *x=100; } ~Test() { delete x; x=NULL; cout<<"析构函数正在执行......"<<endl; } Test(const Test & t)//这个是浅层复制构造,系统默认会提供,这里写出来便于分析 { x=t.x; } void Display() { cout<<"x的值是:"<<*x<<endl; } void SetValue(int val) { *x=val; } private: int *x; }; int main() { Test *T=new Test; Test t=*T; T->Display(); t.Display(); t.SetValue(1); cout<<"重新设置值后:"<<endl; T->Display(); t.Display(); return 0; }
执行结果:
深层复制构造函数代码
#include<iostream> using namespace std; class Test { public: Test() { x=new int; *x=100; } ~Test() { delete x; x=NULL; cout<<"析构函数正在执行......"<<endl; } Test(const Test & t) { x=new int; //为x分配地址空间 *x=*(t.x); //赋值 } void Display() { cout<<"The value of x:"<<*x<<endl; } void SetValue(int val) { *x=val; } private: int *x; }; int main() { Test *T = new Test; Test t = *T; //Test t; t=*T 这两条语句不能代替上面Test t = *T; //因为上面那条语句是初始化,而下面这条语句是赋值,初始化才调用复制构造函数 T->Display(); t.Display(); t.SetValue(1); cout<<"重新设置值后:"<<endl; T->Display(); t.Display(); delete T; return 0; }
执行结果:
复制构造函数调用的条件有以下几个:
1用类的一个对象初始化该类的另一个对象时
2 如果函数的形参是类的对象,调用函数时,进行形参和实参结合时.
3 如果函数的返回值是类的对象,函数执行完成返回调用者时.
4需要产生一个临时类对象时。
相关文章推荐
- 关于指针的一些事情
- C/C++数据对齐详细解析
- C++中引用的使用总结
- C与C++之间相互调用实例方法讲解
- C++中引用(&)的用法与应用实例分析
- 解析C++ 浮点数的格式化输出
- 深入分析C++中几个最不常用的关键字
- c++中inline的用法分析
- C++ Primer 第一部分基本语言
- 深入解析C++ Data Member内存布局
- 从汇编看c++中默认构造函数的使用分析
- 关于C++中的友元函数的一些总结
- C++的sstream标准库详细介绍
- 基于C++自动化编译工具的使用详解
- 浅谈C++中的string 类型占几个字节
- C/C++ 宏详细解析
- 深入分析C++中两个大数相乘结果不正确的问题
- 探讨C++中数组名与指针的用法比较分析
- 深入解析C++中的引用类型
- C++可变参数的实现方法