- 成员函数的性质
类的成员函数(简称类函数)是函数的一种,它的用法和作用和一般函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中。它可以被指定为private,public或protected。
在使用类函数时,要注意它的调用权限(它能否被调用)以及它的作用域(函数能使用什么范围中的数据和函数)。一般做法是将需要被外界调用的成员函数指定为public,它们是类的对外接口。实际上并不是所有的成员函数都指定为public。
有的函数并不是准备为外界调用的,而是为本类中的成员函数所调用的,就应该将它们指定为private,这种函数的作用是支持其他函数的操作,是类中其他成员的工具函数,用户不能调用这些私有的工具函数。 - 在类外定义成员函数
成员函数可以在类体中定义,也可以在类体中只对成员函数进行声明,而在类的外面进行函数定义。如:
class Student{
public:
void display();
private:
int num;
char name[20];
};
void Student::display(){
cout<<num<<endl<<name<<endl;
}
如果在作用域运算符“::”的前面没用类名,或者函数名前既无类名又无作用域运算符,则表示函数不属于任何类,这个函数不是成员函数,而是全局函数,即一般普通函数。
注意:类函数必须先在类体中做原型声明,然后在类外定义,也就是说类体的位置应在函数定义之前,否则编译时会出错。
在类的内部对成员函数作声明,而在类体外定义成员函数,这是程序设计的一种良好习惯。
- 内置成员函数(inline成员函数)
为了减少时间开销,如果在类体中定义的成员函数中不包括循环等控制结构,C++系统会自动地对它们作为内置函数来处理。
C++要求对一般的内置函数要用关键字inline声明,但对类内定义的成员函数,可以省略inline,因为这些成员函数已被隐含地指定为内置函数。
注意:如果成员函数不在类体内定义,而在类体外定义,系统并不把它默认为内置函数,调用这些成员函数的过程和调用一般函数的过程是相同的。如果想将这些成员函数指定为内置函数,应当用inline作显式声明,在函数的定义或函数的原型声明时作inline声明即可。
只有在类外定义的成员函数规模很小而调用频率较高时,才指定为内置函数。 - 成员函数的储存方式
同一类的不同对象中的数据成员的值一般是不相同的,而不同对象的函数的代码是相同的,不论调用哪一个对象的函数的代码,其实调用的都是相同内容的代码。
每个对象所占有的储存空间只有该对象的数据成员所占用的储存空间,而不包括函数代码所占用的储存空间,即一个对象所占空间大小只取决于该对象中数据成员所占的空间,而与成员函数无关。
注意:
虽然调用不同对象的成员函数时都是执行同一段函数代码,但是执行结果一般都是不相同的。
不论是否用inline声明,成员函数的代码段都不占用对象的储存空间,inline函数之影响程序的执行效率,而与成员函数是否占用对象的储存空间无关。
虽然成员函数并没有放在对象的储存空间中,但从逻辑的角度,成员函数是和数据一起封装在一个对象中的,只允许本对象中的成员的函数访问同一对象中的私有数据。