C++ 类成员函数
类的 成员函数 是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样
C++ 类的成员函数有三个特征:
- 声明和定义都是在类内部
- 调用需要通过类或者类的对象作为前缀
- 类成员函数是类的一个成员,它可以操作类的任意对象,可以访问对象中的所有成员
没有类成员函数之前
在前面的章节中,我们使用了下面的代码求一个长方体的体积
#include <iostream> class Box { public: double length; // 长度 double breadth; // 宽度 double height; // 高度 }; int main( ) { Box Box1; // 声明 Box1,类型为 Box double volume = 0.0; // 用于存储体积 // box 1 详述 Box1.height = 5.0; Box1.length = 6.0; Box1.breadth = 7.0; // box 1 的体积 volume = Box1.height * Box1.length * Box1.breadth; std::cout << "Box1 的体积:" << volume << std::endl; return 0; }
一般情况下,我们都会将求体积的代码封装成一个函数
double volume_it( Box box ) { return box.height * box.length * box.breadth; }
但是大家有没有发现这样不够美观,每次调用都要传递一个 Box
对象作为参数
如果能够更简单一些,比如像调用对象的属性一样调用一个方法 box.volume()
就能得到体积那么多好
好像 C++ 天生就帮我们想到了这一点,因为它可以定义类成员函数
定义类成员函数
类成员函数就是定义在类内部的函数,定义方式和普通方式一样,只不过它的定义和声明放到了类的内部
比如上面范例中的 Box
类,我们可以定义一个求体积的类成员函数 double getVolume()
class Box { public: double length; // 长度 double breadth; // 宽度 double height; // 高度 double getVolume(void); // 返回体积 };
我们可以在定义一个类成员函数的同时给出函数实体,就像下面这样
class Box { public: double length; // 长度 double breadth; // 宽度 double height; // 高度 double getVolume(void) { return length * breadth * height; } };
当然,我们也可以在类的外部定义类成员函数的实体,但是需要使用类前缀和 范围解析运算符 ::
就像下面这样
double Box::getVolume(void) { return length * breadth * height; }
在这里,需要强调一点,在 ::
运算符之前必须使用类名
调用类成员函数
调用成员函数是在对象上使用点运算符 ( . ) ,这样它就能操作与该对象相关的数据
Box mbox; // 创建一个对象 mBox.getVolume(); // 调用该对象的成员函数
类属性设置方法
有了类成员函数,我们就可以对每一个属性分别定义一个获取和设置属性的方法
#include <iostream> using namespace std; class Box { public: double length; // 长度 double breadth; // 宽度 double height; // 高度 // 成员函数声明 double getVolume(void); void setLength( double len ); void setBreadth( double bre ); void setHeight( double hei ); }; // 成员函数定义 double Box::getVolume(void) { return length * breadth * height; } void Box::setLength( double len ) { length = len; } void Box::setBreadth( double bre ) { breadth = bre; } void Box::setHeight( double hei ) { height = hei; } // 程序的主函数 int main( ) { Box Box1; // 声明 Box1,类型为 Box Box Box2; // 声明 Box2,类型为 Box double volume = 0.0; // 用于存储体积 // box 1 详述 Box1.setLength(6.0); Box1.setBreadth(7.0); Box1.setHeight(5.0); // box 2 详述 Box2.setLength(12.0); Box2.setBreadth(13.0); Box2.setHeight(10.0); // box 1 的体积 volume = Box1.getVolume(); cout << "Box1 的体积:" << volume <<endl; // box 2 的体积 volume = Box2.getVolume(); cout << "Box2 的体积:" << volume <<endl; return 0; }
编译和运行以上 C++ 代码,输出结果如下
Box1 的体积: 210 Box2 的体积: 1560