1 C++类的成员函数
1.1 C++类成员函数的性质
类的成员函数是函数的一种,它的用法和作用和一般函数基本上是一样的,它也有返回值和函数类型。它与一般函数的区别只是:它是属于一个类的成员,出现在类体中。它可以被指定为private(私有的),public(公用的)或protected(受保护的)。
在使用类成员函数的时候,要注意调用它的权限(即,它能否被调用)以及它的作用域(函数能使用什么范围中的数据和函数)。例如,私有的成员函数只能被本类中的其他成员函数所调用,而不能被类外调用。成员函数可以访问本类中任何成员(包括私有的和公用的),可以引用在本作用域中有效的数据。
所以,定义类的成员函数时,可以将需要被外界调用的成员函数指定为public,它们是类的对外接口。但应注意,并非要求把所有成员函数都指定为public。有的函数并不是准备为外界调用的,而是为本类中的成员函数所调用的,就应该将它们指定为private。
类的成员函数是类体中十分重要的部分,如果一个类中不包含成员函数,就等同于C语言中的结构体类,体现不出类在面向对象程序设计中的作用。
1.2 在类外定义成员函数
前面看到的成员函数是在类体中定义的,那么,也可以在类体中只写成员函数的声明,而在类外面进行函数定义,例如:
class student //以class开头
{
private: //以下的部分是私有部分
char name[32];
char addr[32];
long long number;//以上3 行是成员变量
public: //以下部分是公有部分
student(char* pn, char* pa, long long n)
{
strcpy(name, pn);
strcpy(addr, pa);
number = n;
}
void print(); //这是成员函数
};
void student::print() //这是成员函数
{
cout << "name = " << name << endl;
cout << "addr = " << addr << endl;
cout << "number = " << number << endl;
}
注意:在类体中直接定义函数时,不需要在函数名前面加上类名,因为函数就属于当前定义该函数的类。但成员函数在类外定义的时候,必须在函数名前面加上类名,“::”是作用域限定符或称作用域运算符,用它声明函数是属于哪个类的。
例如,student::print() 表示作用域为student类的print()函数,也就是student类中的print()函数。如果没有“student::”的限定,print()指的是它所在的作用域中的print()函数,就是一个普通的函数,不属于student类。对上面程序段而言,就是指全局作用域中的print()函数,而不是student类中的print()函数。而且不同的类中可能有同名的函数,用作用域限定符加以限定,就明确地说明了是哪一个作用域的函数,也就是哪一个类的函数。
如果在作用域运算符“::”的前面没有类名,或者函数名前面既无类名,又无作用域运算符“::”,如:
::print() 或 print()
就表示 print() 函数不属于任何类,这个函数不是成员函数,而是全局函数,即非成员函数的一般普通函数。
类函数必须先在类体中作原型声明,然后,在类外定义,也就是说类体的位置应在函数定义之前(如上面所示的那样),否则编译时会出错。
虽然函数在类外部定义,但在调用成员函数时会根据在类中声明的函数原型找到函数的定义(函数代码),从而执行该函数。
韦凯峰 Linux C/C++ 程序设计教程,Linux 系统编程,Openwrt 系统开发,微信:13926572996,QQ:1523520001,博客:www.mylinux.vip