为选件类的指针
对该类的指针可以转换为指向基类的指针的两种情况。
备注
第一种情况是指定的基类可访问,并将明确。 (有关不明确的基类更多信息 多个基类 引用。)
基类是否可访问的取决于用于派生继承属性。 考虑继承声明在下图中。
基类的辅助功能图的继承关系图
下表在该图说明了这种情况的基类的可访问性。
基类的辅助功能
函数的类型 |
派生 |
转换。 对合法的 A* 的 B*? |
---|---|---|
外部 (不是类范围) 函数 |
Private |
否 |
|
Protected |
否 |
|
Public |
是 |
B 成员函数 (在少数范围) |
Private |
是 |
|
Protected |
是 |
|
Public |
是 |
C 成员函数 (在 C 范围) |
Private |
否 |
|
Protected |
是 |
|
Public |
是 |
指向该类的指针可以转换为指向基类的指针的第二种情况是使用显式类型转换。 (请参见 使用显式类型转换的表达式 有关显式类型转换的更多信息。)
此类转换的结果是指向 “subobject,”完全由基类描述对象的部分。
下面的代码定义两个类、 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定义的那些属性 (成员函数和数据) 的对象。