3.1.6 类成员函数的定义
前面那些例子使用了类声明:
这个声明对setAge和getAge进行了声明,但没有给出定义。有两种途径可以完成类成员函数的定义:
成员函数的声明在类声明之中进行,但在类声明之外定义。
成员函数的定义也在类声明之中进行。我们称这种定义方式为inline,C++(www.cppentry.com)关键字inline专门用来表示内联。内联定义方式同时提供了成员函数的声明和定义。
下面我们用两个例子来阐明这两种定义方式的区别。
例3-11
本例在类声明之中声明了Person类的各种成员函数,然后在类的声明之外定义这些函数,在定义成员函数时使用了域解析符::,因为其他的类也可能会使用setAge和getAge作为函数名,包括一些顶层函数。
例3-12
本例在类声明中定义了Person类的各种成员函数,所以这些函数都是inline类型的。
内联函数通知编译器用成员函数的函数体替换掉所有对该函数进行调用的代码,这样在替换后的代码中不再出现对这个函数进行调用的代码。例如,如果编译器检测到setAge为内联函数,则在下面的代码段中:
singer.setAge这个函数调用将由setAge的函数体代码替换。
通过在进行成员函数声明的时候使用inline关键字,可将原本定义在类声明之外的成员函数强制变成内联函数。
例3-13
本例中,由于在声明成员函数setAge和getAge时使用了inline关键字,虽然这些成员函数是在类声明之外定义的,但它们仍然是内联函数。