호출 된 클래스에 유형을 추가하기위한이 C ++ 기술은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1643197

  •  10-07-2019
  •  | 
  •  

문제

방금 C ++ 코드를 찾았습니다 (AT http://msdn.microsoft.com/en-us/library/k8336763(vs.71).aspx), 기존 클래스에 유형을 추가하기 위해 전에 본 적이없는 기술을 사용합니다.

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

   // Access the member data
   ATestpm.*pmd = 1;
   pTestpm->*pmd = 2;

   cout  << ATestpm.*pmd << endl
         << pTestpm->*pmd << endl;
}

누군가가 파생 유형을 정의하는이 기술이 무엇인지 말해 줄 수 있습니까? 나는 C ++를 사용한 13 년 만에 그것을 본 적이 없으며, 나의 무지를 끝내고 싶습니다.

도움이 되었습니까?

해결책

주석이 잘못되었습니다. PMFN과 PMD는 전혀 "파생 된 유형"이 아닙니다 (유형도 아닙니다!). 그들은 회원들에게 포인터.

다른 팁

나는 그들이 수업에 "유형을 추가"한다고 생각하지 않습니다. 이들은 클래스의 멤버 함수 및 멤버 데이터에 대한 포인터 유형을 정의 한 다음 멤버 기능 및 데이터 구성원에 액세스하는 데 사용하는 것 같습니다. 유형을 비회원 기능으로 선언하는 방식과 유사하지만 클래스의 구성원이되는 구문은 다릅니다.

이 사이트에서 여기

구문과 관련하여 두 가지 유형의 기능 포인터가 있습니다. 한편으로는 일반적인 C 함수 또는 정적 C ++ 멤버 함수에 대한 포인터가 있습니다. 반면에 비 정적 C ++ 멤버 함수에 대한 포인터가 있습니다. 기본적인 차이점은 비 정적 멤버 기능에 대한 모든 포인터가 숨겨진 논증이 필요하다는 것입니다. 항상 명심하십시오 :이 두 가지 유형의 기능 포인터는 서로 호환되지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top