鱼C论坛

 找回密码
 立即注册
查看: 2259|回复: 0

[C++个人笔记] 隐式成员函数

[复制链接]
发表于 2013-3-13 12:12:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 kangels 于 2013-3-19 10:22 编辑 ( r, |2 @; W" w, U: {$ g

9 v7 @) P- w- f" k  PC++自动提供的成员函数
) k+ X+ s- h, P1 X
      B) `2 u  h# S
  • 默认的构造函数,如果没有定义
  • 默认的析构函数,如果没有定义
  • 复制构造函数,如果没有定义
  • 赋值操作符,如果没有定义
  • 取址操作符,如果没有定义
    - A# Y) s5 `4 s% T* L  N" I
1. 默认的构造函数
6 o2 L5 o' U5 i4 O如果没有默认的构造函数,C++将创建默认的构造函数,例如定义了一个base类,没有定义任何构造函数,则编译器将提供下述默认构造函数:
& K4 _! R5 }. O: e( {base::base(){}: R0 I5 t' _" O
也就是一个什么都不做的默认构造函数
7 Z: a% h: t( D$ P7 q* q5 G' g0 Z
; M) J; b5 A2 B% N5 Y  a2. 默认的析构函数
, u: ~2 s  l. z$ ?3. 复制构造函数& x, j& `$ n- M" f. q3 C
复制构造函数用于初始化,将一个对象复制到新创建的对象中,而不是常规的赋值过程中。
. k$ f. x0 R6 NClass_name(const Class_name &)+ p9 D: w" ^  a8 Z
<1> 何时调用复制构造函数
1 \' C2 L- E9 N7 \新建 一个对象并将其初始化为同类现有对象时,复制构造函数都将被调用。5 D  s7 T% W1 Q1 e& Z
假设dog为animal类的一个对象,下面几种情况都将调用复制构造函数
: f5 S2 ?, `( W3 `$ fanimal cat = dog;+ @8 @7 _# ]4 U$ Y+ U
animal pig(dog);
. ~5 T( \7 _0 p! D& ganimal fish = animal(dog);2 ^' ?" i) o# K- C5 X2 c. K
animal * pa = new animal(dog);
$ a( i. i2 Z- x& P每当程序生成对象副本时,编译器都将调用复制构造函数。8 \4 [6 y* L, x- x* G
void I_love_eat(animal an);                            // 调用此函数时将生成实参的对象副本,将调用复制构造函数
, q1 G5 T; u0 q9 fanimal Big_bad_animal();                              // 此函数返回animal对象时将生成animal对象副本,也将调用复制构造函数$ F/ S3 O, T1 }4 i
<2> 复制构造函数的功能。
; z2 }* F5 o& w1 e默认的复制构造函数逐个复制非静态成员
* z3 r8 Y5 O. a# w: Y1 s$ C' M# D
4. 赋值操作符
3 Z9 ^) t  T' m1 n( }" A0 }ANSI C允许结构赋值,而C++允许类对象赋值,这是通过自动为类重载赋值操作符实现的。) {; g9 q6 i9 C7 K
Class_name & operator =(const Class_name &);/ V6 ?2 u. Q$ x# Q) _
<1> 何时使用赋值操作符
8 m+ d) e' Z& k( Y  M将已有对象赋值给另一个同类对象时,将使用重载的赋值操作符。
* ~  V9 x! f& u/ P9 a7 e& t<2> 赋值操作符的功能
* `8 s6 Y; t% ~* j与复制构造函数相似,赋值操作符的隐式实现也对成员进行逐个复制。- b4 Q" b2 D$ w. n! H% O

& Z7 ?% y; z# t! H( H8 ?5 .取址操作符
  I9 Q% C( c9 |

评分

参与人数 1鱼币 +1 收起 理由
(@_@) + 1 感谢楼主无私奉献!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-7-26 17:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表