类的成员
类是事物的抽象描述,若想定义类就需要抽象出事物的属性及方法。比如,若想描述人,则表示人的类中就应该有性别、年龄、身高等属性,以及行走、说话等方法。描述汽车类就应该有长宽、颜色、品牌等属性,以及前进、倒车、转弯等方法。类的属性及方法,或者说类的数据成员及成员函数共同描述了类的完整定义,如图1描述了汽车类的成员。
图1 汽车类成员描述
从图1中看出,汽车类中的数据成员和成员函数共同描述了汽车具有的特性。
接下来将上一小节中定义的汽车类描述的更加完善,代码如下所示:
class Car //定义类Car
{
//成员函数
public: //public访问限定符
void disp_welcomemsg() //定义类成员函数,显示欢迎信息
{
cout << "Welcome to the car world!" << endl;
}
int get_wheels() //定义类成员函数,获取车轮数量
{
return m_nWheels;
}
//数据成员
private: //private访问限定符
int m_nWheels; //描述车轮数量的数据成员
int m_nSeats; //描述座位数量的数据成员
int m_nLength; //描述汽车长度的数据成员
};
上述代码中,定义了成员函数disp_welcomemsg()、get_wheels(),可以看出,成员函数和普通函数的定义形式相同。另外,本类中还定义了数据成员,这里通过变量m_nWheels、m_nSeats、m_nLength描述了车轮数量、座位数量和汽车长度。
从代码中还可以看出,不论是成员函数还是数据成员都由访问限定符描述它们的访问属性,通常数据成员具有private属性,实现数据隐藏,成员函数具有public属性,方便完成调用。
在这个汽车类中我们是在类内定义成员函数的,其实成员函数还可以仅在类中声明,类外实现。若在类外定义成员函数,必须在函数名前加上类名,类名后加作用域限定符“::”,表示函数属于哪个类,其形式如下所示:
函数返回值类型 类名::成员函数名称(参数表)
{
函数体
}
若函数名前没有类名和作用域运算符“::”,则表示函数不是类中的成员函数,是普通函数。
接下来通过改写Car类的定义,将成员函数在类外实现,代码如下所示:
class Car //定义类Car
{
public:
void disp_welcomemsg(); //声明disp_welcomemsg()函数
int get_wheels(); //声明get_wheels()函数
private:
int m_nWheels;
int m_nSeats;
int m_nLength;
};
//类外定义成员函数
void Car::disp_welcomemsg() //类成员函数disp_welcomemsg()的实现
{
cout << "Welcome to the car world!" << endl;
}
int Car::get_wheels() //类成员函数get_wheels()的实现
{
return m_nWheels;
}
从上述代码可以看出,成员函数disp_welcomemsg()、get_wheels()若定义在类外,类内必须有该函数的声明,类外定义成员函数需要由类名和作用域运算符进行限定。