호출 된 클래스에 유형을 추가하기위한이 C ++ 기술은 무엇입니까?
-
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 ++ 멤버 함수에 대한 포인터가 있습니다. 기본적인 차이점은 비 정적 멤버 기능에 대한 모든 포인터가 숨겨진 논증이 필요하다는 것입니다. 항상 명심하십시오 :이 두 가지 유형의 기능 포인터는 서로 호환되지 않습니다.
제휴하지 않습니다 StackOverflow