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

C++类与对象——第四小节(向函数传递对象,对象的赋值与复制,静态成员),第1张

滴水穿石,厚积薄发。

文章目录
  • 前言
  • 1. 向函数传递对象
    • 1.1 使用函数对象作为函数参数
    • 1.2 使用函数指针作为函数参数
    • 1.3 使用对象引用作为函数参数
  • 2. 对象的赋值与复制
    • 2.1 对象赋值语句
    • 2.2 拷贝构造函数
      • 2.2.1 自定义拷贝构造函数
      • 2.2.2 默认拷贝构造函数
      • 2.2.3 ***重难点触发拷贝构造函数的三种情况
  • 总结


前言

本章,我们继续学习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去干饭了,我们明天见~~

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/674900.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存