复制构造函数、重载赋值运算符、类型转换小结

来源:互联网 发布:mac pro 13寸高清壁纸 编辑:程序博客网 时间:2024/06/14 07:02

1.转换函数:

A.单个值转换为类类型:C_name(typename value)没有返回值

B.类类型转换为其他类型:operator typename()没有返回值,但需要写出return语句

可以用关键字explicit来关闭隐式转换,例如:C_name class1=xxx;将是错误的,必须写成:

C_name class=C_name(xxx);或C_name class=(C_name)xxx;

 

2.复制构造函数:
复制构造函数:复制构造函数接受一个指向对象的常量引用,当且仅当程序创建一个对象的副本时(常见于函数按值传递和返回对象),复制构造函数没有返回值,且一般调用该复制构造函数的对象为副本,副本对象通过调用复制构造函数来将参数对象中的内容复制给予自己使用,然后副本将值赋给函数中的局部变量,在函数结束后,该副本自毁(调用析构函数)

C_name (const C_name & class1)

复制构造函数没有返回值。

 

3.重载的赋值运算符

C_name & operator = (C_name &)

重载的赋值运算符当且仅当对象间赋值时被调用,返回类型可以是对象,也可以是对象的引用(一般常用对象的引用)*注意:这里提醒一下,重载的<<的运算符必须返回ostream对象的引用,因而返回ostream对象本身将导致上文的复制构造函数被调用,而ostream对象没有公用的复制构造函数。

重载赋值运算符在编写时应当注意都旧数据的妥当处理,尤其是使用动态内存分配储存的数据。

 

 

 

 

*注意:如果要编写以上的复制构造函数和赋值运算符,注意使用深度复制(即复制最底层的数据,例如不是仅仅的复制指针本身,而是要复制指针指向的内容)

 

阅读全文
0 0
原创粉丝点击