4.1.2 成员函数的定义
类中含有两种成分,即数据成员和函数成员。函数成员又称为成员函数。成员函数的定义有两种方式。
1.方式一
类声明时给出函数原型,函数体在外部定义。函数定义形式为:
- 返回类型 类名::函数名(参数列表)
- {
- }
上面的函数定义形式与普通的函数定义基本类似,只不过由于该函数是类的成员函数,因此在函数名前面需要添加类的说明,即添加"类名::"来说明这是类的成员函数。下面看一个类的成员函数定义的例子。
【示例4.3】 成员函数的定义,在类声明时给出函数原型,而在类的外部定义函数体。
- class point //声明类point
- {
- private:
- int x;int y;
- public:
- float distance(); //类的成员函数的函数原型
- };
- int point::distance() //类的成员函数定义
- {
- return sqrt(x*x+y*y);
- }
分析:上面的代码首先在point中给出distance()函数的原型,在类的外部定义该函数。这种定义方式使得程序可读性增强,但如果函数体很短则应使用下面的定义方式。
2.方式二
第二种方法是将成员函数定义在类的内部。这样定义的函数为内置函数。如果直接在类内部编写函数体,则称为隐式定义,如果函数仍然写在类外部,则需要在函数定义前添加inline,称为显式定义。下面列出隐式定义和显式定义的例子。
【示例4.4】 成员函数的隐式定义。即将函数直接定义在类的内部。
- class point //声明类point
- {
- private:
- int x;int y;
- public:
- float distance() //定义函数
- {
- return sqrt(x*x+y*y);
- }
- };
分析:上面类的成员函数定义是直接在类的内部进行的。这样定义函数称为内置函数。而且是直接在类的内部实现,又称为隐式定义的内置函数。
【示例4.5】 成员函数的显式定义,即将函数的定义在外部实现,但是添加了关键字inline修饰。此时的函数仍然为内置函数。
- class point //声明类point
- {
- private:
- int x;int y;
- public:
- float distance();
- };
- //类的内置成员函数
- inline int point::distance()
- {
- return sqrt(x*x+y*y);
- }
分析:上面类的成员函数虽然是在类的外部实现的,但是添加了关键字inline,则说明此函数仍然为一个内置函数。
说明:所谓的内置函数与#define相似。在实际应用中,它把函数过程嵌入调用程序,避免频繁入栈出栈,只能用于简单的函数。
【责任编辑:
云霞 TEL:(010)68476606】