鱼C论坛

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

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

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

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

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

x
本帖最后由 kangels 于 2013-3-19 10:22 编辑
2 f1 ^3 i+ k5 w* u* `/ `$ y
/ z& J  p5 P' b8 Z( a8 HC++自动提供的成员函数
! Q: Z* L* S3 g  q
    ( y: g. ?5 G& f) K. u
  • 默认的构造函数,如果没有定义
  • 默认的析构函数,如果没有定义
  • 复制构造函数,如果没有定义
  • 赋值操作符,如果没有定义
  • 取址操作符,如果没有定义
    0 g. Z9 k5 u2 }: r
1. 默认的构造函数! o- [, ^" c. T6 {8 Z2 N! V
如果没有默认的构造函数,C++将创建默认的构造函数,例如定义了一个base类,没有定义任何构造函数,则编译器将提供下述默认构造函数:4 K" o1 e7 t2 A* h2 @+ t- @5 P
base::base(){}  q* g3 p: ?5 c5 Z( e. W& D
也就是一个什么都不做的默认构造函数
$ q* H2 p) e9 \, W' M2 d1 o6 r+ T% W+ z# S
2. 默认的析构函数
( E3 P6 J: d# z5 K: h3. 复制构造函数' X, f8 d5 a8 U8 R
复制构造函数用于初始化,将一个对象复制到新创建的对象中,而不是常规的赋值过程中。
, t* `" T/ \% p; Z2 q& i; x7 K( cClass_name(const Class_name &)
8 c5 V" H3 x6 d4 f<1> 何时调用复制构造函数/ G1 U/ ]& a( D9 e  |$ R( H4 Z3 F
新建 一个对象并将其初始化为同类现有对象时,复制构造函数都将被调用。9 Y: V  w  R. N5 ^, |: t0 ~
假设dog为animal类的一个对象,下面几种情况都将调用复制构造函数7 U4 }+ r7 L6 a* I9 M/ {# X
animal cat = dog;. ~7 A7 I. l  ?8 R/ C+ w
animal pig(dog);
+ R6 e0 X( C2 h6 e5 E! C& Janimal fish = animal(dog);; }6 A1 M, i4 z9 }
animal * pa = new animal(dog);6 V' E* e% ?3 f# e# b/ r$ O! h& F6 l
每当程序生成对象副本时,编译器都将调用复制构造函数。% G% W% Q& L( p7 ^) I& ^8 y1 P
void I_love_eat(animal an);                            // 调用此函数时将生成实参的对象副本,将调用复制构造函数
& z+ R1 {4 ^' M' j. K$ Qanimal Big_bad_animal();                              // 此函数返回animal对象时将生成animal对象副本,也将调用复制构造函数
' q% t2 p9 u) \, D# X2 o4 q9 p<2> 复制构造函数的功能。6 y1 |- N) ^1 K0 \, S4 [
默认的复制构造函数逐个复制非静态成员& o$ j- h/ o6 M  ]! S9 X8 M- v
! Q6 v  B, X. y5 M+ h
4. 赋值操作符
6 _% j$ @8 d+ C% H; Y- q# nANSI C允许结构赋值,而C++允许类对象赋值,这是通过自动为类重载赋值操作符实现的。/ p7 k0 G8 g# _
Class_name & operator =(const Class_name &);
* w; R& r% u& M# n<1> 何时使用赋值操作符0 U! ^% e9 {6 u7 G5 H
将已有对象赋值给另一个同类对象时,将使用重载的赋值操作符。
6 u9 n: z8 E0 Y4 Q. w4 h$ R4 _0 ^<2> 赋值操作符的功能
, s( s" f6 C5 E! y/ r5 A与复制构造函数相似,赋值操作符的隐式实现也对成员进行逐个复制。; N2 C7 @7 `8 q1 L; l1 r  t

$ Y% ]& [+ F+ K" @2 N6 d. m3 v: G) k5 .取址操作符8 R6 d7 `9 P# t: Y+ E' Z. y

评分

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

查看全部评分

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

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

GMT+8, 2025-7-2 14:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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