【C++】类与对象——第四小节(向函数传递对象,对象的赋值与复制)

滴水穿石,厚积薄发。


前言

本章,我们继续学习C++的第四小节,之前的知识详见主页,整理不易,求赞求关注呀~~(wink)跟随yena,我们开始吧!


1. 向函数传递对象

对象可以作为函数参数传递给函数,传递方法与普通变量相同。向函数传递对象,是传值调用,为单向传递,即函数只能使用对象的值,而不能改变对象的数据。

1.1 使用函数对象作为函数参数

完整代码如下。如下代码,将b1作为函数参数传值给show函数,在函数中,可以使用b1的成员函数,从而访问到1b1的值。
在这里插入图片描述

1.2 使用函数指针作为函数参数

代码如下,b2是指向b1的指针,Bim *b2 = & b1;所以show(*b2)与show(& b1)行使的是一个功能。使用对象指针访问成员函数要用’->'
在这里插入图片描述

1.3 使用对象引用作为函数参数

如下代码,b3是b1的一个引用,二者共用一个存储空间。仔细观察下面的代码,会发现我将第一个函数注释掉了,因为这里涉及到一个函数重载的问题,第一个与第三个函数参数类型与参数个数一致,不能同时使用,会使系统产生混淆。
在这里插入图片描述

2. 对象的赋值与复制

2.1 对象赋值语句

我们普通变量的赋值语句用’ = ',例如,int x = 9 ; int y = x ;同类型的对象间也可以进行赋值,例如
Bim b1(170,56) ;
Bim b2(0,0);
b2 = b1
;具体代码如下。
在这里插入图片描述

2.2 拷贝构造函数

拷贝构造函数是一种特殊的构造函数,其形参是本类对象的引用。拷贝构造函数的作用是,在建立一个新对象时,用已经存在的对象去初始化这个新对象

2.2.1 自定义拷贝构造函数

每一个类必须有一个拷贝构造函数,程序员可以自定义拷贝构造函数,若程序员没有自定义一个拷贝构造函数,则系统自动产生一个拷贝构造函数,用于复制出数据成员完全相同的新对象。
自定义拷贝构造函数格式为 类名 ::类名(const 类名 & 对象名),完整代码如下,test t2( t1 ) 和 test t2 = t1 ;两种情况会自动触发自定义拷贝构造函数。一定要注意 上面t2 = t1 与 test t2 = t1 是不同的,第一个是将t1的值赋给t2,第二个会 触发拷贝构造函数。
在这里插入图片描述
说明
1)拷贝构造函数也是一种构造函数,函数名与类名相同,无返回值类型
2)该函数只有一个参数,为同类对象的引用。

2.2.2 默认拷贝构造函数

如果程序员没有自定义拷贝构造函数,则系统自动产生一个拷贝构造函数,用于复制出数据成员完全相同的新对象。如下代码,将自定义拷贝构造函数注释掉,t2和t3则使用默认拷贝构造函数,复制t1的值。
在这里插入图片描述

2.2.3 ***重难点触发拷贝构造函数的三种情况

1)当用一个对象去初始化另一对象时,拷贝构造函数会被自动调用,test t2( t1 ) 和 test t2 = t1 ;两种情况会自动触发拷贝构造函数。
2)当函数的形参是类的对象在调用函数,进行形参实参结合时,会触发拷贝函数。如下代码,把对象t1的值传给 fun(),调用函数时,拷贝构造函数被触发,有自定义拷贝构造函数时,使用自定义拷贝构造函数,无自定义拷贝构造函数时,使用默认拷贝构造函数。
在这里插入图片描述
3)当函数的返回值是类的对象,在函数调用完毕,将返回值带回调用函数处的时候,会触发拷贝构造函数,将此对象赋值给一个临时对象并传回到函数调用处。代码如下。
在这里插入图片描述


总结

本章内容相对较为复杂,一定要亲自动手呀!今天就到这里,yena去干饭了,我们明天见~~

  • 16
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值