共用方式為


類別的指標

在兩種情況下,類別的指標可以轉換成基底類別的指標。

備註

第一種情況是可存取指定的基底類別,而且轉換明確。(如需模稜兩可之基底類別參考的詳細資訊,請參閱多個基底類別)。

基底類別是否可存取,取決於衍生中所使用的繼承種類。 請參考下圖中說明的繼承。

說明基底類別存取範圍的繼承圖表

顯示基底類別存取範圍的繼承圖形

下表說明圖中所示情況的基底類別存取範圍。

基底類別存取範圍

函式類型

衍生

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++)