x=Q.Xcoord( )+10; y=Q.Ycoord( )+20; TPoint R(x,y); return R; }
输出:
Copy_initialization Constructor Called. Copy_initialization Constructor Called. Ok
Copy_initialization Constructor Called. Destructor Called. 释放对象R Destructor Called. 释放对象Q Destructor Called. 释放匿名对象 P=30,55
Destructor Called. 释放对象N Destructor Called. 释放对象P Destructor Called. 释放对象M
说明:
拷贝初始化构造函数使用了三次:
1.明确表示由一个对象初始化另一个对象。 TPoint N(M);
2.当对象作为函数实参传递给函数形参时。
P=f(N);
3.当对象作为函数返回值时。系统用返回值初始化一个匿名对象时使用了拷贝初始化构造函。
return R;
5.4 成员函数的特性
成员函数:在类中定义或说明的函数。 一般成员函数
成员函数 构造函数 特殊成员函数 析构函数
拷贝初始化构造函数
5.4.1 内联函数和外联函数
内联函数:定义在类体内的成员函数。
外联函数:说明在类体内,定义在类体外的成员函数。
外联函数转为内联函数,只要在函数头前面加上关键字inline。
例5.11
class A { public:
A(int x,int y){X=x;Y=y;} 内联函数 int a( ){return X;} 内联函数 int b( ){return Y;} 内联函数 int c( ); int d( ); private: int X,Y; };
inline int A::c( ) { return a( )+b( );}
inline int A::d( ) { return c( );}
#include
int i=m.d( );
cout<<”d( )return:” } 输出:
d( )return:8
内联函数内联函数 <
5.4.2 重载性
例5.12 class M { public:
M(int x,int y){X=x;Y=y;} M(int x){X=x;Y=x*x;} 构造函数重载
int Add(int x,int y);
int Add(int x); 成员函数重载 int Add( );
int Xout( ){ return X;} int Yout( ){ return Y;} private: int X,Y; };
int M::Add(int x,int y) { X=x; Y=y; return X+Y;} int M::Add(int x)
{ X=Y=x; return X+Y;} int M::Add( )
{ return X+Y;}
#include
{ M a(10,20),b(4);
cout<<”a=”<
<
cout<<”b=”< < int i=a.Add( ); int j=a.Add(3,9); int k=b.Add(5); cout< 输出: a=10,20 b=4,16 30 12 10