指向成員的指針運算符:. *和- >*

指向成員的指針運算符:. *和- >*

----來自微軟technet
 
Visual Studio 2012
 
expression .* expression
expression –>* expression

指向成員的指針運算符,。* 和 – AMP_GT*,返回特定的類成員的值在表達式的左側指定對象的。 右側必須指定類的成員。 下面的示例演示如何使用這些運算符: ios

// 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;
}

Output

m_func1
m_func1
1
2

在前面的示例中,爲成員, pmfn的指針,用於調用成員函數 m_func1 指向成員, pmd的其餘指針,用於訪問 m_num 成員。 express

二元運算符。* 合併其第一個操做數,必須是類類型對象,以及其第二個操做數對象,必須是指向成員的指針類型。 less

二元運算符 – AMP_GT* 合併其第一個操做數,必須是指向類類型對象,以及其第二個操做數對象,必須是指向成員的指針類型。 函數

在表達式包含。* 運算符,第一個操做數必須是,而且可訪問,指向成員的指針的類類型指定在第二個操做對象或一個可訪問的類型明確地從派生並能夠訪問該類。 ui

在包含 – AMP_GT* 運算符的表達式,第一個操做數必須是類型 「對類類型的指針在第二個操做對象指定的」的類型,或者必須從該類明確派生的類型。 spa

請考慮類和程序片斷: 指針

// 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.
}

結果。* 或 – AMP_GT* 指向成員的指針運算符位於指針的聲明指定類型的對象或函數對成員。 所以,在前面的示例,該表達式 ADerived.*pmfnFunc1() 的結果是指向返回 void 的功能。 ,若是第二個操做數是左值,此結果是左值。 code

相關文章
相關標籤/搜索