非靜態成員函式
class CL {
public:
void member_function() {}
};
這些函式在類的例項上呼叫,如下所示:
CL instance;
instance.member_function();
它們可以在類定義的內部或外部定義; 如果在外部定義,則將它們指定為在類的範圍內。
struct ST {
void defined_inside() {}
void defined_outside();
};
void ST::defined_outside() {}
它們可以是 CV 合格和/或 ref-qualified ,影響他們如何看待他們被呼叫的例項; 該函式將看到例項具有指定的 cv-qualifier(如果有)。呼叫哪個版本將基於例項的 cv 限定符。如果沒有與例項具有相同 cv 限定符的版本,則將呼叫更多 cv 限定版本(如果可用)。
struct CVQualifiers {
void func() {} // 1: Instance is non-cv-qualified.
void func() const {} // 2: Instance is const.
void cv_only() const volatile {}
};
CVQualifiers non_cv_instance;
const CVQualifiers c_instance;
non_cv_instance.func(); // Calls #1.
c_instance.func(); // Calls #2.
non_cv_instance.cv_only(); // Calls const volatile version.
c_instance.cv_only(); // Calls const volatile version.
Version >= C++ 11
成員函式 ref-qualifiers 指示是否要在 rvalue 例項上呼叫該函式,並使用與函式 cv-qualifiers 相同的語法。
struct RefQualifiers {
void func() & {} // 1: Called on normal instances.
void func() && {} // 2: Called on rvalue (temporary) instances.
};
RefQualifiers rf;
rf.func(); // Calls #1.
RefQualifiers{}.func(); // Calls #2.
如有必要,還可以組合 CV 限定符和 ref 限定符。
struct BothCVAndRef {
void func() const& {} // Called on normal instances. Sees instance as const.
void func() && {} // Called on temporary instances.
};
它們也可以是虛擬的 ; 這是多型性的基礎,並允許子類提供與父類相同的介面,同時提供它們自己的功能。
struct Base {
virtual void func() {}
};
struct Derived {
virtual void func() {}
};
Base* bp = new Base;
Base* dp = new Derived;
bp.func(); // Calls Base::func().
dp.func(); // Calls Derived::func().
有關更多資訊,請參閱此處 。