成员函数的定义
如上所述, 类中含有两种成份,即数据成员和成员函数, 其中成员函数也称方法。实际上,成员函数和方法指的是同一种实体, 是一种实体的两种不同叫法, 成员函数是程序设计语言 C + + 中的术语,而方法是面向对象方法中的术语。在以后的叙述中, 本书采用术语成员函数。
成员函数的定义通常采用两种方式。
第一种方式是在类声明中只给出成员函数的原型, 而成员函数体在类的外部定义。这种成员函数定义的一般形式是:
返回类型 类名∷函数名(参数表) {
// 函数体
}
例如,表示坐标点的类 point 可声明如下:
class point
{
private :
int x, y;
public:
void setpoint (int, int) ;
// 设置坐标点的成员函数 setpoint( )的函数原型 int getx( ) ;
// 取 x 坐标点的成员函数 getx( )的函数原型
int gety ( ) ;
// 取 y 坐标点的成员函数 gety( )的函数原型
} ;
void point∷setpoint( int a, int b)// 定义成员函数 setpoint( )
{
x = a;
y = b;
}
int point∷getx( ) // 定义成员函数 getx( )
{
return x;
}
int point∷gety( ) // 定义成员函数 gety( )
{
return y;
}
从这个例子可以看出,虽然函数 setpoint( )、getx( )和 gety( ) 在类外部定义, 但它们属于类 point 的成员函数, 它们可以直接使用类 point 中的数据成员 x 和 y。
说明:
- 在所定义的成员函数名之前应缀上类名, 在类名和函数名之间应加上分隔符 “∷”,例如上面例子中的“point∷”。
- 在定义成员函数时, 对函数所带的参数, 不但要说明它的类型, 还要指出其参 数名。
3.在定义成员函数时, 其返回类型一定要与函数原型中声明的返回类型匹配。 成员函数的第二种定义方式是:将成员函数定义在类的内部, 即定义为内置函数。在 C + + 中, 可以用下面两种格式定义类的内置函数:
(1 ) 隐式定义
所谓内置函数的隐式定义, 就是直接将函数定义在类内部,例如:
class point
{
private :
int x, y;
public:
void setpoint(int a, int b)
{
x = a;
y = b;
}
int getx()
{
return x;
}
int gety ()
{
retrun y;
}
} ;
此时, 函数 setpoint( )、getx( )和 gety( )就是隐含的内置函数。内置函数的调用类似宏指令的扩展,它直接在调用处扩展其代码, 而不进行一般函数的调用操作。
(2 ) 显式定义
在定义内置函数时, 为了书写清晰,仍将它放在类定义体外。但为了使它仍然起内置函数的作用, 在函数定义前冠以关键字“inline”, 以此显式地说明这是一个内置函数。例如上面的例子改为显示定义可变成如下形式:
class point
{
private :
int x, y;
public:
void setpoint(int, int) ;
int getx() ;
int gety() ;
};
inline void point∷setpoint(int a, int b)
{
x = a;
y = b;
}
inline int point∷getx()
{
return x;
}
inline int point∷gety()
{
return y;
}
说明:简单的成员函数定义成内置函数可以提高执行的效率, 但如果函数体较长, 将使程序量增加很多。因此,一般对非常简单的函数才声明为内置函数。