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

C++引用指针 & 构造函数

2018-03-27 18:38 218 查看
近来回转 C++的学习,脑子又被搞得了一团迷(简直不要忘得太快.....

class Date
{
public :
Date()
{}
// 拷贝构造函数
Date (const Date& d)
{
_year = d ._year;
_month = d ._month;
_day = d ._day;
}
private :
int _year ;
int _month ;
int _day ;
};


拷贝构造实现

[b]特征:

1. 拷贝构造函数其实是一个构造函数的重载。
2. 拷贝构造函数的参数必须使用引用传参,使用传值方式会引发无穷递归调用(调拷贝构造函数会传参,传参过程又会调用拷贝构造,以此往复...无穷递归)
3. 若未显示定义,系统会生成默认缺省的拷贝构造函数。缺省的拷贝构造函数会依次拷贝类成员进行初始化

何时调用拷贝函数:

一个对象以值传递的方式传入函数体

一个对象以值传递的方式从函数返回(与返回值优化密切相关)

一个对象需要通过另一个对象进行初始化

关于拷贝构造函数还有一类很热的问题,构造函数拷贝赋值函数的N种调用情况

即判断下面每种情况都调用了多少次构造、拷贝构造...

//1.Date 对象做参数传值
void fun1 (Date d) //void fun1(Date& d)
{}
// 2.Date 对象做返回值传值
Date fun2 () // Date& fun2()
{
Date d ;
return d ;
}
// 3.Date 对象做临时返回值传值 (编译器优化问题)
Date fun3 () // Date& fun3()
{
return Date ();
}
int main ()
{
// 场景
Date d1;
fun1(d1);
// 场景
Date d2 = fun2();
// 场景
Date d3 ;
d3 = fun3 ();
return 0;
}


这其实和前面所说的传值返回也有着紧密的联系,同时还涉及编译器的优化,如果有兴趣可以参考:

http://www.cnblogs.com/hazir/archive/2012/04/19/2456840.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: