1.成员函数的性质

    • 与一般函数的区别:成员函数属于一个类的成员,出现在类体中。它可以被指定为private、public或protected。
    • 使用类函数时,要注意调用它的权限以及它的作用域。
    • 成员函数可访问本类宏任何成员(包括私有的和公有的)。
    • 一般将需要外界调用的成员函数指定为public,它们是类的对外接口。
    • 并非要求把所有成员函数都指定为public。有的函数并不 是准备为外界调用的,而是为本类中的成员函数所调用的, 就应该将它们指定为private。这种函数的作用是支持其他 函数的操作,是类中其他成员的工具函数(utility function), 类外用户不能调用这些私有的工具函数。

    2.在类外定义成员函数

    • 可在类体中只写成员函数的声明,而在类外进行函数定义

      1. class Student
      2. { public:
      3. void display( ); //公用成员函数原型声明
      4. private:
      5. int num;
      6. string name;
      7. char sex; //以上3行是私有数据成员
      8. };
      9. void Student display( ) //在类外定义display类函数
      10. {cout<<″num:″<<num<<endl; //函数体
      11. cout<<″name:″<<name<<endl;
      12. cout<<″sex:″<<sex<<endl;
      13. }
      14. Student stud1,stud2; //定义两个类对象
      • 在类体中直接定义函数时,不需要在函数名前面加上类 名。
      • 成员函数在类外定义时,必须在函数名前面加上类名, “∷ ”是作用域限定符。
      • 类函数必须先在类体中作原型声明,然后在类外定义, 也就是说类体的位置应在函数定义之前,否则编译时会出 错。
      • 在类的内部对成员函数作声明,而在类体外定义成员函 数,这是程序设计的一种良好习惯。

    3.inline成员函数

    • 类的成员函数可指定为内置函数;
    • 如在类体中定义的成员函数不包括循环等控制结构,C++系统会自动将它们作为内置函数处理;
    • 如果成员函数不在类体内定义,而在类体外定义,系统 并不把它默认为内置(inline)函数,如果想将这些成员函数 指定为内置函数,应当用inline作显式声明。
    • 例:

      1. class Student
      2. { public: inline void display( ); //声明为内置函数
      3. private:
      4. int num;
      5. string name;
      6. char sex;
      7. };
      8. inline void Student display( ) // 在类外定义display函数
      9. {cout<<″num:″<<num<<endl;
      10. cout<<″name:″<<name<<endl;
      11. cout<<″sex:″<<sex<<endl;
      12. }
      • 在函数的声明或函数的定义两者之一作inline声明即可。

    4.成员函数的存储方式

    • 用类去定义对象时,系统会为每一个对象分配存储空间。
    • 如果一个类包括了数据和函数,要分别为数据和函数的 代码分配存储空间。
    • 如果用同一个类定义了10个对象,那么就需要分别为10 个对象的数据和函数代码分配存储单元吗?

      • C++编译系统只用一段空间来存放共同的函数代码段,在 调用各对象的函数时,都去调用这个公用的函数代码。

        1. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/2314091/1597728215019-a491c9f2-db9e-4732-a293-8c881c9cc372.png#align=left&display=inline&height=118&margin=%5Bobject%20Object%5D&name=image.png&originHeight=236&originWidth=561&size=26303&status=done&style=none&width=280.5)
      • 这样做会大大节约存储空间,因此每个对象所占 用的存储空间只是该对象的数据部分所占用的存储空间, 而不包括函数代码所占用的存储空间。

    • 注意:
      • 不同的对象使用的是同一个函数代码段,它怎么能够分 别对不同对象中的数据进行操作呢?
        • C++为此专门设立了一个名为this的指针,用来指向 不同的对象。
      • 不论成员函数在类内定义还是在类外定义,成员函数的 代码段都用同一种方式存储。