成员函数概述¶
参考:Overview of Member Functions
函数定义¶
在类声明中定义函数时,不需要添加类名限定;当定义在类外时,需要使用作用域解析运算符(::
)进行类名限定
static¶
成员函数可分为静态和非静态,非静态参数隐式包含了this
参数
inline¶
定义在类声明内部的成员函数称为内联函数,也可以使用关键字inline
在类外部定义
virtual¶
virtual
关键字仅适用于非静态成员函数,它表示调用函数的绑定被推迟到运行时
在类函数中添加关键字virtual表示声明该函数为虚函数:当通过基类的指针或者引用调用该成员函数时,将根据指针指向的对象类型确定调用的函数,而非指针的类型
#include <iostream>
using namespace std;
class clsA {
public:
virtual void haha() {
cout << "clsA" << endl;
};
};
class clsB : public clsA {
public:
void haha() override {
cout << "clsB" << endl;
};
};
int main(int argc, char *argv[]) {
clsA *cls = new clsB();
cls->haha();
return 0;
}
如果基类函数没有定义,那么在基类函数声明后添加=0
,表示纯虚函数定义
class clsA {
public:
virtual void haha() = 0;
};
override¶
可以使用override
关键字指定要重写基类虚拟函数的成员函数
override
是上下文敏感的,只有在成员函数声明之后使用时才具有特殊意义;否则,它不是保留关键字
语法如下:
function-declaration override;
关键字override
的使用能够辅助进行代码检查,有利于程序的纠错
final¶
使用final
关键字可以指定不能在派生类中重写的虚拟函数。还可以使用它来指定不能继承的类
final
是上下文敏感的,只有当它在函数声明或类名之后使用时才有特殊意义;否则,它不是保留关键字
语法如下:
function-declaration final;
class class-name final base-classes(基类可选)