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.