类成员函数就是类中定义的函数。这样的函数都是成员函数,用以完成特定操作。类设计时成员函数的访问类型一般设为public公有的,这样就可以将成员变量都封装起来,更加安全。一般设计图:
![](https://zouzhongliang.com/wp-content/uploads/2019/05/类成员变量成员函数.jpg)
此图比较好的说明了,类中成员变量、成员函数的各访问类型。记住这是一般性的设计,不是唯一标准。
以Cpeople类为例,来讲一下具体体现在代码上是如何。
1 2 3 4 |
Cpeople kim; string strID = kim.ID; //strID:private私有的不能访问ERR string strID = kim.GetID(); //用成员函数来获取 kim.SetID("3131236546546547"); //成员函数设置ID号 |
Cpeople类完整代码,包括成员函数,成员变量,
内联成员函数:
成员函数定义成内联成员函数方法,有两种方案。
1.在类体外定义成员函数时,前加上inline关键字
1 2 3 4 5 6 7 8 9 |
inline void Cpeople::SetID(string strID) { ID = strID; } inline string Cpeople::GetID() { return ID; } |
2.在类体内定义成员函数时,编译器默认将其定义成内联成员函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
class Cpeople { private: string ID; string name; unsigned int height; unsigned int weight; protected: unsigned int age; public: static unsigned int Num; void SetID(string strID) //类体内定义成员函数,默认为内联成员函数 { ID = strID; } string GetID() { return ID; } }; unsigned int Cpeople::Num = 0; |
注意一点定义成inline内联成员函数时,此函数体一定是比较小的,比如SetID(),GetID()两个成员函数,函数体只有一句语句。如果成员函数体比较大时,不要写成inline内联成员函数,这样是滥用影响性能。
成员函数重载:
成员函数重载方法可以参考函数重载,其实是一样的。只是它是类里面的函数,所以叫成员函数,也是函数所以跟函数重载一样。
写个成员函数重载实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
class Cpeople { private: string ID; string name; bool Gender; unsigned int height; unsigned int weight; protected: unsigned int age; public: static unsigned int Num; //成员函数设计成可重载 //不用在意代码有什么意义 //主要说明成员函数如何重载 bool SetID(string strID); void SetID(string strID); string GetID(); }; unsigned int Cpeople::Num = 0; bool Cpeople::SetID(string strID) { ID = strID; return true; } void Cpeople::SetID(string strID) { ID = strID; } string Cpeople::GetID() { return ID; } |
SetID()成员函数设计成可重载,可以看出与普通函数重载是一样的。这里成员函数重载就不再细说。