난 그냥 발견했습니다 기존의 클래스에 유형을 추가하기 전에 내가 본 적이없는 기술을 사용합니다 (http://msdn.microsoft.com/en-us/library/k8336763(VS.71).aspx에서) 일부 C++ 코드 :클래스에 유형을 추가하는 C++ 기술은 무엇입니까?
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 년 만에 그것을 보지 못했으며, 나의 무지를 종식시키고 싶다.
"기존 클래스에 유형 추가"란 무엇을 의미합니까? 또한 코드의 어떤 부분이 "기존 클래스에 유형을 추가합니까?" 내가 볼 수있는 것은 회원에 대한 포인터의 사용입니다. – sellibitze
코멘트로 참조하십시오 // 유도 유형 pmfn 및 pmd 정의. 및 라인 예 : ATestpm. * pmd = 1; 'pmd'가 Testpm 클래스에 추가되었다고 제안합니다. 이것들이 나의 질문을 던지며 내가 그 말을하는 방식이다. 지금 코드를 살펴보고 지금까지 제공된 대답의 이점을 통해 pmd와 pmfn이 Testpm 내부의 멤버에 대한 포인터로 정의되고 있음을 알 수 있습니다. 그것은 그들이 객체가 아니라 클래스에 대한 포인터라는 사실입니다. Testpm 객체에서 액세스 할 수있는 방법은 혼란 스럽습니다. 전에는 이것을 보지 못했기 때문에. –
이들은 클래스의 멤버에 대한 포인터입니다. 'pmfn': 멤버 함수에 대한 포인터이고 'pmd': 멤버 데이터에 대한 포인터입니다. 이 개념은 STL 사용자에게 노출되지 않지만 STL 알고리즘 내에서 많이 사용됩니다. –