指標對成員運算子: .*
和 ->*
語法
pm-expression
:
cast-expression
pm-expression
.*
cast-expression
pm-expression
->*
cast-expression
備註
指標對成員運算子 .*
,並 ->*
傳回運算式左邊所指定物件之特定類別成員的值。 右邊則必須指定類別的成員。 以下範例會示範如何使用這些運算子:
// expre_Expressions_with_Pointer_Member_Operators.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
class Testpm {
public:
void m_func1() { cout << "m_func1\n"; }
int m_num;
};
// Define derived types pmfn and pmd.
// These types are pointers to members m_func1() and
// m_num, respectively.
void (Testpm::*pmfn)() = &Testpm::m_func1;
int Testpm::*pmd = &Testpm::m_num;
int main() {
Testpm ATestpm;
Testpm *pTestpm = new Testpm;
// Access the member function
(ATestpm.*pmfn)();
(pTestpm->*pmfn)(); // Parentheses required since * binds
// less tightly than the function call.
// Access the member data
ATestpm.*pmd = 1;
pTestpm->*pmd = 2;
cout << ATestpm.*pmd << endl
<< pTestpm->*pmd << endl;
delete pTestpm;
}
輸出
m_func1
m_func1
1
2
在上述範例中,成員 pmfn
的指標會在叫用成員函式 m_func1
時使用。 另一個成員 pmd
的指標會在存取 m_num
成員時使用。
二元運算子 .*
會結合其第一個運算元,其必須是類別類型的物件,其第二個運算元必須是指標對成員類型。
二元運算子 ->*
會結合其第一個運算元,其必須是類別類型的物件的指標,其第二個運算元必須是指標對成員類型。
在包含 運算子的 .*
運算式中,第一個運算元必須是 類別類型的 ,而且可以存取第二個運算元中指定的成員指標,或該類別明確衍生自 且可存取的成員指標。
在包含 運算子的 ->*
運算式中,第一個運算元必須是第二個運算元中所指定型別的「類別型別指標」類型,或者必須是明確衍生自該類別的類型。
範例
以下列類別和程式碼片段為例:
// expre_Expressions_with_Pointer_Member_Operators2.cpp
// C2440 expected
class BaseClass {
public:
BaseClass(); // Base class constructor.
void Func1();
};
// Declare a pointer to member function Func1.
void (BaseClass::*pmfnFunc1)() = &BaseClass::Func1;
class Derived : public BaseClass {
public:
Derived(); // Derived class constructor.
void Func2();
};
// Declare a pointer to member function Func2.
void (Derived::*pmfnFunc2)() = &Derived::Func2;
int main() {
BaseClass ABase;
Derived ADerived;
(ABase.*pmfnFunc1)(); // OK: defined for BaseClass.
(ABase.*pmfnFunc2)(); // Error: cannot use base class to
// access pointers to members of
// derived classes.
(ADerived.*pmfnFunc1)(); // OK: Derived is unambiguously
// derived from BaseClass.
(ADerived.*pmfnFunc2)(); // OK: defined for Derived.
}
或 ->*
指標對成員運算子的結果 .*
,是成員指標宣告中指定的型別物件或函式。 因此,在上述範例中,運算式 ADerived.*pmfnFunc1()
的結果是傳回 void
之函式的指標。 如果第二個運算元是左值,則這個結果會是左值。
注意
如果其中一個成員指標運算子的結果是函式,則結果只能做為函式呼叫運算子的運算元使用。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應