1.成员函数的性质
- 与一般函数的区别:成员函数属于一个类的成员,出现在类体中。它可以被指定为private、public或protected。
- 使用类函数时,要注意调用它的权限以及它的作用域。
- 成员函数可访问本类宏任何成员(包括私有的和公有的)。
- 一般将需要外界调用的成员函数指定为public,它们是类的对外接口。
- 并非要求把所有成员函数都指定为public。有的函数并不 是准备为外界调用的,而是为本类中的成员函数所调用的, 就应该将它们指定为private。这种函数的作用是支持其他 函数的操作,是类中其他成员的工具函数(utility function), 类外用户不能调用这些私有的工具函数。
2.在类外定义成员函数
可在类体中只写成员函数的声明,而在类外进行函数定义
class Student
{ public:
void display( ); //公用成员函数原型声明
private:
int num;
string name;
char sex; //以上3行是私有数据成员
};
void Student∷ display( ) //在类外定义display类函数
{cout<<″num:″<<num<<endl; //函数体
cout<<″name:″<<name<<endl;
cout<<″sex:″<<sex<<endl;
}
Student stud1,stud2; //定义两个类对象
- 在类体中直接定义函数时,不需要在函数名前面加上类 名。
- 成员函数在类外定义时,必须在函数名前面加上类名, “∷ ”是作用域限定符。
- 类函数必须先在类体中作原型声明,然后在类外定义, 也就是说类体的位置应在函数定义之前,否则编译时会出 错。
- 在类的内部对成员函数作声明,而在类体外定义成员函 数,这是程序设计的一种良好习惯。
3.inline成员函数
- 类的成员函数可指定为内置函数;
- 如在类体中定义的成员函数不包括循环等控制结构,C++系统会自动将它们作为内置函数处理;
- 如果成员函数不在类体内定义,而在类体外定义,系统 并不把它默认为内置(inline)函数,如果想将这些成员函数 指定为内置函数,应当用inline作显式声明。
例:
class Student
{ public: inline void display( ); //声明为内置函数
private:
int num;
string name;
char sex;
};
inline void Student∷ display( ) // 在类外定义display函数
{cout<<″num:″<<num<<endl;
cout<<″name:″<<name<<endl;
cout<<″sex:″<<sex<<endl;
}
- 在函数的声明或函数的定义两者之一作inline声明即可。
4.成员函数的存储方式
- 用类去定义对象时,系统会为每一个对象分配存储空间。
- 如果一个类包括了数据和函数,要分别为数据和函数的 代码分配存储空间。
如果用同一个类定义了10个对象,那么就需要分别为10 个对象的数据和函数代码分配存储单元吗?
C++编译系统只用一段空间来存放共同的函数代码段,在 调用各对象的函数时,都去调用这个公用的函数代码。

这样做会大大节约存储空间,因此每个对象所占 用的存储空间只是该对象的数据部分所占用的存储空间, 而不包括函数代码所占用的存储空间。
- 注意:
- 不同的对象使用的是同一个函数代码段,它怎么能够分 别对不同对象中的数据进行操作呢?
- C++为此专门设立了一个名为this的指针,用来指向 不同的对象。
- 不论成员函数在类内定义还是在类外定义,成员函数的 代码段都用同一种方式存储。
- 不同的对象使用的是同一个函数代码段,它怎么能够分 别对不同对象中的数据进行操作呢?