类可以包含数据和函数。 这些函数称为“成员函数”。所有在类声明中声明的非静态函数均被视为成员函数,并且是使用成员选择运算符(. 和 –>)调用的。 从相同类的其他成员函数调用成员函数时,可以省略对象和成员选择运算符。 例如:
// member_functions1.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
class Point
{
public:
short x()
{
return _x;
}
short y()
{
return _y;
}
void Show()
{
cout << x() << ", " << y() << "\n";
}
private:
short _x, _y;
};
int main()
{
Point pt;
pt.Show();
}
请注意,在成员函数 Show 中,对其他成员函数 x 和 y 的调用是在没有成员选择运算符的情况下进行的。 这些调用暗指 this->x() 和 this->y()。 但在 main 中,必须使用对象 pt 和成员选择运算符 (.) 选择成员函数 Show。
在类中声明的静态函数可使用成员选择运算符来调用或通过指定完全限定的函数名称(包括类名称)来调用。
备注
使用 friend 关键字声明的函数不会被视为其中声明了 friend 的类的成员(尽管它可以是另一个类的成员)。friend 声明控制非成员函数对类数据的访问权限。
以下类声明演示如何声明和调用成员函数:
// member_functions2.cpp
class Point
{
public:
unsigned GetX()
{
return ptX;
}
unsigned GetY()
{
return ptY;
}
void SetX( unsigned x )
{
ptX = x;
}
void SetY( unsigned y )
{
ptY = y;
}
private:
unsigned ptX, ptY;
};
int main()
{
// Declare a new object of type Point.
Point ptOrigin;
// Member function calls use the . member-selection operator.
ptOrigin.SetX( 0 );
ptOrigin.SetY( 0 );
// Declare a pointer to an object of type Point.
Point *pptCurrent = new Point;
// Member function calls use the -> member-selection operator.
pptCurrent->SetX( ptOrigin.GetX() + 10 );
pptCurrent->SetY( ptOrigin.GetY() + 10 );
}
在上述代码中,对象 ptOrigin 的成员函数是使用成员选择运算符 (.) 调用的。 但是,pptCurrent 指向的对象的成员函数是使用成员选择运算符 –> 调用的。