Sdílet prostřednictvím


Ukazatel myši na člen operátory:. * a - > *

expression .* expression
expression –>* expression

Poznámky

Operátory ukazatel myši na člen. * – a > *, vrátí hodnotu člena určité třídy pro objekt určený na levé straně výrazu.Pravé musíte zadat členem třídy.Následující příklad ukazuje použití těchto operátorů:

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

Výsledek

m_func1
m_func1
1
2

V předchozím příkladu ukazatel myši na člena, pmfn, se používá k vyvolání členské funkce m_func1.Jiný ukazatel myši na člena, pmd, se používá k přístupu m_num členských.

Binární operátor. * kombinuje jeho prvním operandem, musí být typu třídy objektu s jeho druhý operand musí být typu ukazatel myši na člen.

Binární operátor – > * kombinuje jeho prvním operandem, musí být ukazatel na objekt typu třídy s jeho druhý operand musí být typu ukazatel myši na člen.

Ve výrazu s obsahující. * operátor, první operand musí být typu třídy a přístupné se ukazatel na určený v druhý operand nebo přístupné typu jednoznačně odvozené z a přístupné třídy.

Ve výrazu s obsahující na – > * operátor, první operand musí být typu "ukazatele typu třídy" typu určeného v druhý operand nebo ji musí být typu jednoznačně odvozen ze třídy.

Příklad

Zvažte následující třídy a program fragmentu:

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

Výsledek. * nebo – > * ukazatel na členských hospodářských subjektů je objekt nebo funkce typu určeného v prohlášení o ukazatel na člena.Ano, v předchozím příkladu výsledek výrazu ADerived.*pmfnFunc1() je ukazatel na funkci, která vrátí hodnotu typu void.Tento výsledek je druhý operand je l-l hodnota.

[!POZNÁMKA]

Pokud je výsledkem operátorů ukazatel na členské funkce, lze výsledek použít pouze jako operand provozovateli volání funkce.

Viz také

Referenční dokumentace

Operátory C++

Přednost a asociativita operátorů