다음을 통해 공유


포인터와 멤버 연산자:. * 및-> *

expression .* expression
expression –>* 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;
}

Output

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를 반환 하는 함수에 대 한 포인터입니다.두 번째 피연산자는 l-value 인 경우이 결과 l-값입니다.

[!참고]

그런 다음 결과 포인터 멤버 연산자 중 하나는 함수인 경우 결과 하려면 함수 호출 연산자는 피연산자와만 사용할 수 있습니다.

참고 항목

참조

C + + 연산자

연산자 우선 순위 및 결합성