다음을 통해 공유


클래스에 대 한 포인터

두 가지 경우에서 클래스에 대 한 포인터를 기본 클래스에 대 한 포인터 변환할 수 있습니다.

설명

첫 번째 경우 변환이 모호 하지 않은 경우 지정 된 기본 클래스에 액세스할 수 있습니다.(참조 하십시오 여러 기본 클래스 모호한 기본 클래스 참조에 대 한 자세한 내용은.)

기본 클래스에 액세스할 수 있는지 여부는 파생에 사용 되는 상속의 종류에 따라 달라 집니다.다음 그림의 설명의 상속을 고려해 야 합니다.

상속 그래프의 기본 클래스의 액세스 가능성에 대 한

상속 그래프 기본 클래스 액세스 가능성

다음 표에서 그림과 상황에 대 한 액세스 가능성은 기본 클래스를 보여 줍니다.

기본 클래스의 액세스 가능성

함수 유형

파생

변환

B * A * 법률에?

(클래스 범위의 없습니다) 외부 함수

Private

아니요

 

Protected

아니요

 

Public

B 멤버 함수 (B 범위)에

Private

 

Protected

 

Public

(에 C 범위) c 멤버 함수

Private

아니요

 

Protected

 

Public

명시적 형식 변환을 사용 하는 경우, 두 번째 경우는 클래스에 대 한 포인터를 기본 클래스에 대 한 포인터 변환할 수 있습니다.(참조 하십시오 명시적 형식 변환을 사용 하 여 식 을 명시적 형식 변환에 대 한 자세한 내용은.)

이러한 변환의 결과 하위 "개체를" 기본 클래스에 의해 완벽 하 게 설명 되어 있는 개체의 부분에 대 한 포인터입니다.

다음 코드에서는 두 개의 클래스를 정의 A 및 B, 어디 B 에서 파생 된 A.(상속에 대 한 자세한 내용은 파생 클래스입니다.) 다음 정의 bObject, 형식의 개체를 B, 한 두 개의 포인터 (pA 및 pB) 개체를 가리킵니다.

// conve__pluslang_Pointers_to_Classes.cpp
// C2039 expected
class A
{
public:
    int AComponent;
    int AMemberFunc();
};

class B : public A
{
public:
    int BComponent;
    int BMemberFunc();
};
int main()
{
   B bObject;
   A *pA = &bObject;
   B *pB = &bObject;

   pA->AMemberFunc();   // OK in class A
   pB->AMemberFunc();   // OK: inherited from class A
   pA->BMemberFunc();   // Error: not in class A
}

포인터 pA 형식인 A *, 어떤 해석 될 수 있습니다 의미 "유형의 개체에 대 한 포인터 A." 멤버를 bObject(같은 BComponent 및 BMemberFunc) 형식으로 고유 하 B 통해 액세스 되지 않는 pA. pA 포인터 클래스에 정의 된만 이러한 특성 멤버 함수 및 데이터 개체에 액세스할 수 있습니다 A.

참고 항목

참조

포인터 변환 (C++)