鱼C论坛

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

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

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

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

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

x
本帖最后由 kangels 于 2013-3-19 10:22 编辑
* k8 R5 I4 h$ l$ J# g9 E9 t% k; r
C++自动提供的成员函数- g, d+ e1 J& \6 R7 j; H  {( L# B
    $ X+ `" c; q% O8 e! `% v5 b5 \- E
  • 默认的构造函数,如果没有定义
  • 默认的析构函数,如果没有定义
  • 复制构造函数,如果没有定义
  • 赋值操作符,如果没有定义
  • 取址操作符,如果没有定义
    ( z$ c2 v* E8 Q: J2 \- C
1. 默认的构造函数
' w  A( V( X1 x; U4 B8 A2 o- W如果没有默认的构造函数,C++将创建默认的构造函数,例如定义了一个base类,没有定义任何构造函数,则编译器将提供下述默认构造函数:' G0 F% T; I4 E9 e3 q
base::base(){}
, q4 P2 @% e$ m" q9 D0 U) W- S- m2 p也就是一个什么都不做的默认构造函数" [& w# a0 P2 I5 C: Q

5 J% t# f1 \. j% E2. 默认的析构函数
$ v) M5 C3 @0 ?& u! |0 B3. 复制构造函数3 Y3 |+ u3 S# Z
复制构造函数用于初始化,将一个对象复制到新创建的对象中,而不是常规的赋值过程中。4 d3 n3 }" Q, c- Z+ r0 n# s! L
Class_name(const Class_name &)9 B2 j, ~) ^+ ^% w/ z
<1> 何时调用复制构造函数
( T4 v3 d  O$ h- P* w新建 一个对象并将其初始化为同类现有对象时,复制构造函数都将被调用。
" `( F. ]) l$ R假设dog为animal类的一个对象,下面几种情况都将调用复制构造函数  R" y6 F3 ]$ P
animal cat = dog;
6 R" r1 ?1 Q& y6 ~; oanimal pig(dog);
$ I9 v6 V6 Z1 ?1 k/ ^animal fish = animal(dog);9 S# q  [1 Y: }7 A4 T7 K
animal * pa = new animal(dog);: E( ^3 Y7 y9 p$ F1 V
每当程序生成对象副本时,编译器都将调用复制构造函数。4 z4 K9 ?6 u- t5 x. ]( A# e0 s
void I_love_eat(animal an);                            // 调用此函数时将生成实参的对象副本,将调用复制构造函数
" v1 V1 D  p+ e3 C& v, G- ~animal Big_bad_animal();                              // 此函数返回animal对象时将生成animal对象副本,也将调用复制构造函数
; b/ S1 S( j" O& [; `<2> 复制构造函数的功能。
4 c9 |1 W9 z7 K" N0 c默认的复制构造函数逐个复制非静态成员
6 T7 K, B  |( J* ?+ }' [
, l& ~9 }" E2 L4. 赋值操作符
3 z3 c  X# M1 P, `' x; ]  R5 dANSI C允许结构赋值,而C++允许类对象赋值,这是通过自动为类重载赋值操作符实现的。4 ?# T/ E& [6 O1 ~
Class_name & operator =(const Class_name &);
  H! w. i9 _% W( p- Q% ~<1> 何时使用赋值操作符5 u+ Y/ S' @6 T* m. H" _# Z9 L
将已有对象赋值给另一个同类对象时,将使用重载的赋值操作符。. N$ V; W+ |% k7 g# E* p* \& C
<2> 赋值操作符的功能( X+ M7 S4 \  X( M5 r
与复制构造函数相似,赋值操作符的隐式实现也对成员进行逐个复制。
% M. x/ t7 q4 {& I" I8 Q) I" H
$ G! Y! q7 o; p* _. C; O8 e5 .取址操作符
# v! A5 f* Y) Y3 R3 K' ?

评分

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

查看全部评分

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

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

GMT+8, 2025-12-3 12:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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