成员函数概述

参考:Overview of Member Functions

函数定义

在类声明中定义函数时,不需要添加类名限定;当定义在类外时,需要使用作用域解析运算符(::)进行类名限定

static

成员函数可分为静态和非静态,非静态参数隐式包含了this参数

inline

定义在类声明内部的成员函数称为内联函数,也可以使用关键字inline在类外部定义

virtual

参考:virtual Specifier

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 Specifier

可以使用override关键字指定要重写基类虚拟函数的成员函数

override是上下文敏感的,只有在成员函数声明之后使用时才具有特殊意义;否则,它不是保留关键字

语法如下:

function-declaration override;

关键字override的使用能够辅助进行代码检查,有利于程序的纠错

final

参考:final Specifier

使用final关键字可以指定不能在派生类中重写的虚拟函数。还可以使用它来指定不能继承的类

final是上下文敏感的,只有当它在函数声明或类名之后使用时才有特殊意义;否则,它不是保留关键字

语法如下:

function-declaration final;
class class-name final base-classes(基类可选)