拷贝构造
来源:互联网 发布:摩天轮票务 知乎 编辑:程序博客网 时间:2024/05/21 06:39
前文中提及到了拷贝构造,本文将进行详细探讨。
拷贝构造函数,又称复制构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。其唯一的形参必须是引用,但并不限制为const,一般普遍的会加上const限制。此函数经常用在函数调用时用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。如果可以的话,它将用常量方式调用,另外,也可以用非常量方式调用。
Test6_1 (int a){ m_a = a; printf ("普通构造函数\n");}// 拷贝构造Test6_1(const Test6_1 &obj){ // m_a = obj.m_a; m_a = -100; printf ("拷贝构造被调用\n");}~Test6_1(){ printf ("***********析构函数被调用: m_a = %d\n", m_a);}void print(){ printf ("a = %d\n", m_a);}
拷贝构造函数的调用时机:
在以下几种几种情况会调用拷贝构造函数
1)拿 t1 取初始化 t2
Test6_1 t1(10);Test6_1 t2(t1);
2)等于号
Test6_1 t1(10);Test6_1 t3 = t1;
3)当对象作为函数参数传递的时候会调用拷贝构造
void test(Test6_1 t){ t.print();}test(t1);
4)函数返回值返回对象
写一个返回值为对象的函数:
Test6_1 test6_1(){ Test6_1 t(10); return t;}
// 一个函数返回一个对象的时候会创建一个匿名对象,拿返回的那个对象对匿名对象进行初始化,会调用拷贝构造// 如果没有去接收函数的返回值的话,匿名对象会立马被销毁test6_1();
// 如果用一个对象去接收函数的返回值,先用函数返回的对象去初始化匿名对象,调用一次拷贝构造,然后拿新的对象的名字去命名这个匿名对象,匿名对象从无名转成有名Test6_1 t1 = test6_1();
Test6_1 t2(10);// 用函数返回的对象对匿名对象进行初始化,调用拷贝构造// 用匿名对象对 t2 进行赋值,调用 赋值运算符 = t2 = test6_1();
阅读全文
0 0
- 拷贝构造
- 拷贝构造
- 构造、拷贝构造、析构
- 构造、拷贝构造、赋值
- 拷贝构造 赋值构造
- 拷贝构造与深拷贝
- 拷贝构造与深拷贝
- 拷贝构造和拷贝赋值
- 拷贝构造与拷贝赋值
- 拷贝构造函数--默认拷贝构造函数
- 拷贝构造函数 深拷贝 浅拷贝
- 拷贝构造函数(深拷贝,浅拷贝)
- 拷贝构造函数浅拷贝深拷贝
- 拷贝构造函数,浅拷贝,深拷贝
- 拷贝构造函数 深拷贝 浅拷贝
- 拷贝构造函数----深拷贝、浅拷贝
- 构造、拷贝构造函数基础
- 构造函数、拷贝构造函数
- Unity3d 插值同步
- 用原生JS实现轮播图
- 灵活无成本的ITSM系统|ServiceHot ITSOM
- Understanding LSTM Networks
- StringUtil对字符串类型参数进行校验的工具类
- 拷贝构造
- 灯泡开关问题----bulb switcher,from leetcode
- js中的事件委托或是事件代理详解
- void Update ( ) 更新 void FixedUpdate ( )
- 谈谈对Spring IOC的理解
- 使用py-faster-rcnn来训练voc2007数据集(Ubuntu)
- Kotlin语言学习之定义变量(var,val)、方法(fun)
- php.ini
- Linux 安装配置curl 命令工具